(a) Data Gathering and Integration

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
Stats <- read.csv("C:/Users/charan/OneDrive/Desktop/dump/Seasons_Stats.csv", header=FALSE)
salary_1718 <- read.csv("C:/Users/charan/OneDrive/Desktop/reg-project/NBA_season1718_salary.csv", header=FALSE)
# rm(per_game_stats)

Here I am using two datasets, one is the stats dataset and other is the Salary dataset.

Stats:

This dataset contains detailed performance metrics for NBA players from the year 1950 to 2017. It includes various statistics, such as points, assists, rebounds, and more, which are crucial for building features.

Salary_1718:

This includes the salaries of NBA players for the 2017-2018 season. This serves as the target variable for the regression model, providing the actual salaries that we aim to predict.

Filtering and Merging

Since we are trying to predict the salaries of the players for the 17-18 Season on basis of their performance in 16-17 season, We do not require all data present in Stats dataset,hence we will filter it out in accordance to our objective.

First Let’s rename the columns:

colnames(Stats) <- c("Sl.no","Year",    "Player",   "Pos",  "Age",  "Tm",   "G",    "GS",   "MP",   "PER",  "TS%",  "3PAr", "FTr",  "ORB%", "DRB%", "TRB%", "AST%", "STL%", "BLK%", "TOV%", "USG%", "blank1",   "OWS",  "DWS",  "WS",   "WS/48",    "blank2",   "OBPM", "DBPM", "BPM",  "VORP", "FG",   "FGA",  "FG%",  "3P",   "3PA",  "3P%",  "2P",   "2PA",  "2P%",  "eFG%", "FT",   "FTA",  "FT%",  "ORB",  "DRB",  "TRB",  "AST",  "STL",  "BLK",  "TOV",  "PF",   "PTS")

Stats <- Stats[-1, ]
head(Stats)
##   Sl.no Year          Player Pos Age  Tm  G GS MP PER   TS% 3PAr   FTr ORB%
## 2     0 1950 Curly Armstrong G-F  31 FTW 63           0.368      0.467     
## 3     1 1950    Cliff Barker  SG  29 INO 49           0.435      0.387     
## 4     2 1950   Leo Barnhorst  SF  25 CHS 67           0.394      0.259     
## 5     3 1950      Ed Bartels   F  24 TOT 15           0.312      0.395     
## 6     4 1950      Ed Bartels   F  24 DNN 13           0.308      0.378     
## 7     5 1950      Ed Bartels   F  24 NYK  2           0.376       0.75     
##   DRB% TRB% AST% STL% BLK% TOV% USG% blank1  OWS  DWS   WS WS/48 blank2 OBPM
## 2                                           -0.1  3.6  3.5                  
## 3                                            1.6  0.6  2.2                  
## 4                                            0.9  2.8  3.6                  
## 5                                           -0.5 -0.1 -0.6                  
## 6                                           -0.5 -0.1 -0.6                  
## 7                                              0    0    0                  
##   DBPM BPM VORP  FG FGA   FG% 3P 3PA 3P%  2P 2PA   2P%  eFG%  FT FTA   FT% ORB
## 2               144 516 0.279            144 516 0.279 0.279 170 241 0.705    
## 3               102 274 0.372            102 274 0.372 0.372  75 106 0.708    
## 4               174 499 0.349            174 499 0.349 0.349  90 129 0.698    
## 5                22  86 0.256             22  86 0.256 0.256  19  34 0.559    
## 6                21  82 0.256             21  82 0.256 0.256  17  31 0.548    
## 7                 1   4  0.25              1   4  0.25  0.25   2   3 0.667    
##   DRB TRB AST STL BLK TOV  PF PTS
## 2         176             217 458
## 3         109              99 279
## 4         140             192 438
## 5          20              29  63
## 6          20              27  59
## 7           0               2   4

Let’s convert the columns into their best suited forms:

library(dplyr)
Stats <- Stats %>%
  mutate(across(everything(), ~type.convert(as.character(.), as.is = TRUE)))
Stats <- Stats %>%
  mutate(
    Player = as.character(Player),
    Pos = as.factor(Pos),
    Tm = as.factor(Tm),
    G = as.integer(G),
    GS = as.integer(GS),
    MP = as.integer(MP),
    FG = as.integer(FG),
    FGA = as.integer(FGA),
    `3P` = as.numeric(`3P`),
    `3PA` = as.numeric(`3PA`),
    `2P` = as.integer(`2P`),
    `2PA` = as.integer(`2PA`),
    FT = as.numeric(FT),
    FTA = as.numeric(FTA),
    ORB = as.integer(ORB),
    DRB = as.integer(DRB),
    TRB = as.integer(TRB),
    AST = as.integer(AST),
    STL = as.integer(STL),
    BLK = as.integer(BLK),
    TOV = as.integer(TOV),
    PF = as.integer(PF),
    PTS = as.integer(PTS)
  )
str(Stats)
## 'data.frame':    24691 obs. of  53 variables:
##  $ Sl.no : int  0 1 2 3 4 5 6 7 8 9 ...
##  $ Year  : int  1950 1950 1950 1950 1950 1950 1950 1950 1950 1950 ...
##  $ Player: chr  "Curly Armstrong" "Cliff Barker" "Leo Barnhorst" "Ed Bartels" ...
##  $ Pos   : Factor w/ 24 levels "","C","C-F","C-PF",..: 10 21 17 6 6 6 9 10 7 7 ...
##  $ Age   : int  31 29 25 24 24 24 22 23 28 28 ...
##  $ Tm    : Factor w/ 70 levels "","AND","ATL",..: 23 27 15 63 22 43 27 64 63 23 ...
##  $ G     : int  63 49 67 15 13 2 60 3 65 36 ...
##  $ GS    : int  NA NA NA NA NA NA NA NA NA NA ...
##  $ MP    : int  NA NA NA NA NA NA NA NA NA NA ...
##  $ PER   : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ TS%   : num  0.368 0.435 0.394 0.312 0.308 0.376 0.422 0.275 0.346 0.362 ...
##  $ 3PAr  : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ FTr   : num  0.467 0.387 0.259 0.395 0.378 0.75 0.301 0.313 0.395 0.48 ...
##  $ ORB%  : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ DRB%  : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ TRB%  : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ AST%  : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ STL%  : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ BLK%  : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ TOV%  : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ USG%  : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ blank1: logi  NA NA NA NA NA NA ...
##  $ OWS   : num  -0.1 1.6 0.9 -0.5 -0.5 0 3.6 -0.1 -2.2 -0.7 ...
##  $ DWS   : num  3.6 0.6 2.8 -0.1 -0.1 0 1.2 0 5 2.2 ...
##  $ WS    : num  3.5 2.2 3.6 -0.6 -0.6 0 4.8 -0.1 2.8 1.5 ...
##  $ WS/48 : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ blank2: logi  NA NA NA NA NA NA ...
##  $ OBPM  : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ DBPM  : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ BPM   : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ VORP  : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ FG    : int  144 102 174 22 21 1 340 5 226 125 ...
##  $ FGA   : int  516 274 499 86 82 4 936 16 813 435 ...
##  $ FG%   : num  0.279 0.372 0.349 0.256 0.256 0.25 0.363 0.313 0.278 0.287 ...
##  $ 3P    : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ 3PA   : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ 3P%   : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ 2P    : int  144 102 174 22 21 1 340 5 226 125 ...
##  $ 2PA   : int  516 274 499 86 82 4 936 16 813 435 ...
##  $ 2P%   : num  0.279 0.372 0.349 0.256 0.256 0.25 0.363 0.313 0.278 0.287 ...
##  $ eFG%  : num  0.279 0.372 0.349 0.256 0.256 0.25 0.363 0.313 0.278 0.287 ...
##  $ FT    : num  170 75 90 19 17 2 215 0 209 132 ...
##  $ FTA   : num  241 106 129 34 31 3 282 5 321 209 ...
##  $ FT%   : num  0.705 0.708 0.698 0.559 0.548 0.667 0.762 0 0.651 0.632 ...
##  $ ORB   : int  NA NA NA NA NA NA NA NA NA NA ...
##  $ DRB   : int  NA NA NA NA NA NA NA NA NA NA ...
##  $ TRB   : int  NA NA NA NA NA NA NA NA NA NA ...
##  $ AST   : int  176 109 140 20 20 0 233 2 163 75 ...
##  $ STL   : int  NA NA NA NA NA NA NA NA NA NA ...
##  $ BLK   : int  NA NA NA NA NA NA NA NA NA NA ...
##  $ TOV   : int  NA NA NA NA NA NA NA NA NA NA ...
##  $ PF    : int  217 99 192 29 27 2 132 6 273 140 ...
##  $ PTS   : int  458 279 438 63 59 4 895 10 661 382 ...

Let’s rename and remove unwanted columns in Salary dataset:

colnames(salary_1718) <- c("Rank","Player","Team", "Salary17_18")
salary_1718 <- salary_1718[-1, ]
salary_1718 <- salary_1718[ ,-1]
head(salary_1718)
##           Player Team Salary17_18
## 2  Stephen Curry  GSW    34682550
## 3   LeBron James  CLE    33285709
## 4   Paul Millsap  DEN    31269231
## 5 Gordon Hayward  BOS    29727900
## 6  Blake Griffin  DET    29512900
## 7     Kyle Lowry  TOR    28703704

Converting salary column into numeric:

salary_1718$Salary17_18 <- as.numeric(salary_1718$Salary17_18)

Now let’s filter out the stats data and fetch stats of the players for 16-17 season:

stats17 <- Stats %>%
  filter(Year >= 2017) %>%
  select(Year:G, MP, PER, FG:PTS) %>%
  distinct(Player, .keep_all = TRUE)
head(stats17)
##   Year        Player Pos Age  Tm  G   MP  PER  FG FGA   FG% 3P 3PA   3P%  2P
## 1 2017  Alex Abrines  SG  23 OKC 68 1055 10.1 134 341 0.393 94 247 0.381  40
## 2 2017    Quincy Acy  PF  26 TOT 38  558 11.8  70 170 0.412 37  90 0.411  33
## 3 2017  Steven Adams   C  23 OKC 80 2389 16.5 374 655 0.571  0   1 0.000 374
## 4 2017 Arron Afflalo  SG  31 SAC 61 1580  9.0 185 420 0.440 62 151 0.411 123
## 5 2017 Alexis Ajinca   C  28 NOP 39  584 12.9  89 178 0.500  0   4 0.000  89
## 6 2017  Cole Aldrich   C  28 MIN 62  531 12.7  45  86 0.523  0   0    NA  45
##   2PA   2P%  eFG%  FT FTA   FT% ORB DRB TRB AST STL BLK TOV  PF PTS
## 1  94 0.426 0.531  44  49 0.898  18  68  86  40  37   8  33 114 406
## 2  80 0.413 0.521  45  60 0.750  20  95 115  18  14  15  21  67 222
## 3 654 0.572 0.571 157 257 0.611 282 333 615  86  88  78 146 195 905
## 4 269 0.457 0.514  83  93 0.892   9 116 125  78  21   7  42 104 515
## 5 174 0.511 0.500  29  40 0.725  46 131 177  12  20  22  31  77 207
## 6  86 0.523 0.523  15  22 0.682  51 107 158  25  25  23  17  85 105

Merging The two data sets

stats_and_salary <- merge(stats17, salary_1718, by.x = "Player", by.y = "Player")
summary(stats_and_salary)
##     Player               Year           Pos          Age              Tm     
##  Length:442         Min.   :2017   SG     :97   Min.   :19.00   TOT    : 53  
##  Class :character   1st Qu.:2017   PG     :92   1st Qu.:23.00   PHO    : 17  
##  Mode  :character   Median :2017   C      :89   Median :26.00   BOS    : 16  
##                     Mean   :2017   SF     :85   Mean   :26.19   CHI    : 16  
##                     3rd Qu.:2017   PF     :78   3rd Qu.:29.00   MIL    : 16  
##                     Max.   :2017   PF-C   : 1   Max.   :40.00   UTA    : 16  
##                                    (Other): 0                   (Other):308  
##        G               MP              PER              FG       
##  Min.   : 2.00   Min.   :   9.0   Min.   :-2.10   Min.   :  1.0  
##  1st Qu.:42.25   1st Qu.: 625.2   1st Qu.:10.20   1st Qu.: 78.5  
##  Median :66.00   Median :1369.5   Median :13.00   Median :185.0  
##  Mean   :57.91   Mean   :1352.3   Mean   :13.64   Mean   :219.5  
##  3rd Qu.:76.00   3rd Qu.:2022.5   3rd Qu.:16.30   3rd Qu.:318.5  
##  Max.   :82.00   Max.   :3048.0   Max.   :30.80   Max.   :824.0  
##                                                                  
##       FGA              FG%               3P              3PA        
##  Min.   :   3.0   Min.   :0.1000   Min.   :  0.00   Min.   :  0.00  
##  1st Qu.: 181.5   1st Qu.:0.4052   1st Qu.:  4.00   1st Qu.: 18.25  
##  Median : 416.5   Median :0.4440   Median : 40.50   Median :117.50  
##  Mean   : 480.7   Mean   :0.4507   Mean   : 54.98   Mean   :153.21  
##  3rd Qu.: 684.0   3rd Qu.:0.4870   3rd Qu.: 90.00   3rd Qu.:252.75  
##  Max.   :1941.0   Max.   :0.7500   Max.   :324.00   Max.   :789.00  
##                                                                     
##       3P%               2P             2PA              2P%       
##  Min.   :0.0000   Min.   :  0.0   Min.   :   2.0   Min.   :0.000  
##  1st Qu.:0.2845   1st Qu.: 55.0   1st Qu.: 110.2   1st Qu.:0.454  
##  Median :0.3415   Median :126.5   Median : 254.5   Median :0.491  
##  Mean   :0.3127   Mean   :164.5   Mean   : 327.5   Mean   :0.492  
##  3rd Qu.:0.3780   3rd Qu.:227.8   3rd Qu.: 454.8   3rd Qu.:0.536  
##  Max.   :1.0000   Max.   :730.0   Max.   :1421.0   Max.   :1.000  
##  NA's   :28                                                       
##       eFG%              FT              FTA              FT%        
##  Min.   :0.1000   Min.   :  0.00   Min.   :  0.00   Min.   :0.0000  
##  1st Qu.:0.4750   1st Qu.: 29.25   1st Qu.: 39.25   1st Qu.:0.6880  
##  Median :0.5070   Median : 67.00   Median : 91.00   Median :0.7700  
##  Mean   :0.5051   Mean   :100.50   Mean   :129.71   Mean   :0.7472  
##  3rd Qu.:0.5370   3rd Qu.:131.75   3rd Qu.:170.25   3rd Qu.:0.8367  
##  Max.   :0.8750   Max.   :746.00   Max.   :881.00   Max.   :1.0000  
##                                                     NA's   :4       
##       ORB              DRB              TRB               AST       
##  Min.   :  0.00   Min.   :  0.00   Min.   :   0.00   Min.   :  0.0  
##  1st Qu.: 16.00   1st Qu.: 78.25   1st Qu.:  99.25   1st Qu.: 37.0  
##  Median : 35.00   Median :164.00   Median : 205.50   Median : 82.0  
##  Mean   : 55.46   Mean   :186.32   Mean   : 241.77   Mean   :127.3  
##  3rd Qu.: 75.75   3rd Qu.:252.75   3rd Qu.: 328.25   3rd Qu.:165.5  
##  Max.   :345.00   Max.   :817.00   Max.   :1116.00   Max.   :906.0  
##                                                                     
##       STL              BLK              TOV               PF       
##  Min.   :  0.00   Min.   :  0.00   Min.   :  0.00   Min.   :  0.0  
##  1st Qu.: 18.25   1st Qu.:  7.00   1st Qu.: 31.25   1st Qu.: 61.0  
##  Median : 39.00   Median : 17.00   Median : 61.00   Median :114.0  
##  Mean   : 43.28   Mean   : 26.06   Mean   : 75.18   Mean   :110.7  
##  3rd Qu.: 60.00   3rd Qu.: 33.75   3rd Qu.:106.00   3rd Qu.:153.8  
##  Max.   :157.00   Max.   :214.00   Max.   :464.00   Max.   :278.0  
##                                                                    
##       PTS             Team            Salary17_18      
##  Min.   :   3.0   Length:442         Min.   :   17224  
##  1st Qu.: 209.2   Class :character   1st Qu.: 1518316  
##  Median : 497.0   Mode  :character   Median : 3519283  
##  Mean   : 594.5                      Mean   : 7106258  
##  3rd Qu.: 841.2                      3rd Qu.:10812701  
##  Max.   :2558.0                      Max.   :34682550  
## 

From from the summary, after merging we can see that there are few Na values to be handled.

(c) Cleaning

head(stats_and_salary)
##            Player Year Pos Age  Tm  G   MP  PER  FG FGA   FG% 3P 3PA   3P%  2P
## 1    A.J. Hammons 2017   C  24 DAL 22  163  8.4  17  42 0.405  5  10 0.500  12
## 2    Aaron Brooks 2017  PG  32 IND 65  894  9.5 121 300 0.403 48 128 0.375  73
## 3    Aaron Gordon 2017  SF  21 ORL 80 2298 14.4 393 865 0.454 77 267 0.288 316
## 4 Al-Farouq Aminu 2017  SF  26 POR 61 1773 11.3 183 466 0.393 70 212 0.330 113
## 5      Al Horford 2017   C  30 BOS 68 2193 17.7 379 801 0.473 86 242 0.355 293
## 6    Al Jefferson 2017   C  32 IND 66  931 18.9 235 471 0.499  0   1 0.000 235
##   2PA   2P%  eFG%  FT FTA   FT% ORB DRB TRB AST STL BLK TOV  PF  PTS Team
## 1  32 0.375 0.464   9  20 0.450   8  28  36   4   1  13  10  21   48  MIA
## 2 172 0.424 0.483  32  40 0.800  18  51  69 125  25   9  66  93  322  MIN
## 3 598 0.528 0.499 156 217 0.719 116 289 405 150  64  40  89 172 1019  ORL
## 4 254 0.445 0.468  96 136 0.706  77 374 451  99  60  44  94 102  532  POR
## 5 559 0.524 0.527 108 135 0.800  95 369 464 337  52  87 116 138  952  BOS
## 6 470 0.500 0.499  65  85 0.765  75 203 278  57  19  16  33 125  535  IND
##   Salary17_18
## 1     1312611
## 2     2116955
## 3     5504420
## 4     7319035
## 5    27734405
## 6     9769821

Here we can remove the Team column from the stats_and_salary data as it is not required for analysis. This column indicates the team to which the player belonged in 17-18 season, Which is not required for us.

library(dplyr)
stats_and_salary <- stats_and_salary %>% select(-Team)

Now let’s check the summary and also check if there are any Na values in our merged dataset.

summary(stats_and_salary)
##     Player               Year           Pos          Age              Tm     
##  Length:442         Min.   :2017   SG     :97   Min.   :19.00   TOT    : 53  
##  Class :character   1st Qu.:2017   PG     :92   1st Qu.:23.00   PHO    : 17  
##  Mode  :character   Median :2017   C      :89   Median :26.00   BOS    : 16  
##                     Mean   :2017   SF     :85   Mean   :26.19   CHI    : 16  
##                     3rd Qu.:2017   PF     :78   3rd Qu.:29.00   MIL    : 16  
##                     Max.   :2017   PF-C   : 1   Max.   :40.00   UTA    : 16  
##                                    (Other): 0                   (Other):308  
##        G               MP              PER              FG       
##  Min.   : 2.00   Min.   :   9.0   Min.   :-2.10   Min.   :  1.0  
##  1st Qu.:42.25   1st Qu.: 625.2   1st Qu.:10.20   1st Qu.: 78.5  
##  Median :66.00   Median :1369.5   Median :13.00   Median :185.0  
##  Mean   :57.91   Mean   :1352.3   Mean   :13.64   Mean   :219.5  
##  3rd Qu.:76.00   3rd Qu.:2022.5   3rd Qu.:16.30   3rd Qu.:318.5  
##  Max.   :82.00   Max.   :3048.0   Max.   :30.80   Max.   :824.0  
##                                                                  
##       FGA              FG%               3P              3PA        
##  Min.   :   3.0   Min.   :0.1000   Min.   :  0.00   Min.   :  0.00  
##  1st Qu.: 181.5   1st Qu.:0.4052   1st Qu.:  4.00   1st Qu.: 18.25  
##  Median : 416.5   Median :0.4440   Median : 40.50   Median :117.50  
##  Mean   : 480.7   Mean   :0.4507   Mean   : 54.98   Mean   :153.21  
##  3rd Qu.: 684.0   3rd Qu.:0.4870   3rd Qu.: 90.00   3rd Qu.:252.75  
##  Max.   :1941.0   Max.   :0.7500   Max.   :324.00   Max.   :789.00  
##                                                                     
##       3P%               2P             2PA              2P%       
##  Min.   :0.0000   Min.   :  0.0   Min.   :   2.0   Min.   :0.000  
##  1st Qu.:0.2845   1st Qu.: 55.0   1st Qu.: 110.2   1st Qu.:0.454  
##  Median :0.3415   Median :126.5   Median : 254.5   Median :0.491  
##  Mean   :0.3127   Mean   :164.5   Mean   : 327.5   Mean   :0.492  
##  3rd Qu.:0.3780   3rd Qu.:227.8   3rd Qu.: 454.8   3rd Qu.:0.536  
##  Max.   :1.0000   Max.   :730.0   Max.   :1421.0   Max.   :1.000  
##  NA's   :28                                                       
##       eFG%              FT              FTA              FT%        
##  Min.   :0.1000   Min.   :  0.00   Min.   :  0.00   Min.   :0.0000  
##  1st Qu.:0.4750   1st Qu.: 29.25   1st Qu.: 39.25   1st Qu.:0.6880  
##  Median :0.5070   Median : 67.00   Median : 91.00   Median :0.7700  
##  Mean   :0.5051   Mean   :100.50   Mean   :129.71   Mean   :0.7472  
##  3rd Qu.:0.5370   3rd Qu.:131.75   3rd Qu.:170.25   3rd Qu.:0.8367  
##  Max.   :0.8750   Max.   :746.00   Max.   :881.00   Max.   :1.0000  
##                                                     NA's   :4       
##       ORB              DRB              TRB               AST       
##  Min.   :  0.00   Min.   :  0.00   Min.   :   0.00   Min.   :  0.0  
##  1st Qu.: 16.00   1st Qu.: 78.25   1st Qu.:  99.25   1st Qu.: 37.0  
##  Median : 35.00   Median :164.00   Median : 205.50   Median : 82.0  
##  Mean   : 55.46   Mean   :186.32   Mean   : 241.77   Mean   :127.3  
##  3rd Qu.: 75.75   3rd Qu.:252.75   3rd Qu.: 328.25   3rd Qu.:165.5  
##  Max.   :345.00   Max.   :817.00   Max.   :1116.00   Max.   :906.0  
##                                                                     
##       STL              BLK              TOV               PF       
##  Min.   :  0.00   Min.   :  0.00   Min.   :  0.00   Min.   :  0.0  
##  1st Qu.: 18.25   1st Qu.:  7.00   1st Qu.: 31.25   1st Qu.: 61.0  
##  Median : 39.00   Median : 17.00   Median : 61.00   Median :114.0  
##  Mean   : 43.28   Mean   : 26.06   Mean   : 75.18   Mean   :110.7  
##  3rd Qu.: 60.00   3rd Qu.: 33.75   3rd Qu.:106.00   3rd Qu.:153.8  
##  Max.   :157.00   Max.   :214.00   Max.   :464.00   Max.   :278.0  
##                                                                    
##       PTS          Salary17_18      
##  Min.   :   3.0   Min.   :   17224  
##  1st Qu.: 209.2   1st Qu.: 1518316  
##  Median : 497.0   Median : 3519283  
##  Mean   : 594.5   Mean   : 7106258  
##  3rd Qu.: 841.2   3rd Qu.:10812701  
##  Max.   :2558.0   Max.   :34682550  
## 
sum(is.na(stats_and_salary))
## [1] 32

our Merged data has 32 Na values in total to be handled. We can replace these Na values by the means of their columns.I chose this approach because, since it is a sports data containing stats of each player, we cannot omit an entire player’s data because of just few missing values.

numeric_cols <- sapply(stats_and_salary, is.numeric)
stats_and_salary[, numeric_cols] <- 
  lapply(stats_and_salary[, numeric_cols], 
         function(col) ifelse(is.na(col), mean(col, na.rm = TRUE), col))
sum(is.na(stats_and_salary))
## [1] 0
summary(stats_and_salary)
##     Player               Year           Pos          Age              Tm     
##  Length:442         Min.   :2017   SG     :97   Min.   :19.00   TOT    : 53  
##  Class :character   1st Qu.:2017   PG     :92   1st Qu.:23.00   PHO    : 17  
##  Mode  :character   Median :2017   C      :89   Median :26.00   BOS    : 16  
##                     Mean   :2017   SF     :85   Mean   :26.19   CHI    : 16  
##                     3rd Qu.:2017   PF     :78   3rd Qu.:29.00   MIL    : 16  
##                     Max.   :2017   PF-C   : 1   Max.   :40.00   UTA    : 16  
##                                    (Other): 0                   (Other):308  
##        G               MP              PER              FG       
##  Min.   : 2.00   Min.   :   9.0   Min.   :-2.10   Min.   :  1.0  
##  1st Qu.:42.25   1st Qu.: 625.2   1st Qu.:10.20   1st Qu.: 78.5  
##  Median :66.00   Median :1369.5   Median :13.00   Median :185.0  
##  Mean   :57.91   Mean   :1352.3   Mean   :13.64   Mean   :219.5  
##  3rd Qu.:76.00   3rd Qu.:2022.5   3rd Qu.:16.30   3rd Qu.:318.5  
##  Max.   :82.00   Max.   :3048.0   Max.   :30.80   Max.   :824.0  
##                                                                  
##       FGA              FG%               3P              3PA        
##  Min.   :   3.0   Min.   :0.1000   Min.   :  0.00   Min.   :  0.00  
##  1st Qu.: 181.5   1st Qu.:0.4052   1st Qu.:  4.00   1st Qu.: 18.25  
##  Median : 416.5   Median :0.4440   Median : 40.50   Median :117.50  
##  Mean   : 480.7   Mean   :0.4507   Mean   : 54.98   Mean   :153.21  
##  3rd Qu.: 684.0   3rd Qu.:0.4870   3rd Qu.: 90.00   3rd Qu.:252.75  
##  Max.   :1941.0   Max.   :0.7500   Max.   :324.00   Max.   :789.00  
##                                                                     
##       3P%               2P             2PA              2P%       
##  Min.   :0.0000   Min.   :  0.0   Min.   :   2.0   Min.   :0.000  
##  1st Qu.:0.2900   1st Qu.: 55.0   1st Qu.: 110.2   1st Qu.:0.454  
##  Median :0.3360   Median :126.5   Median : 254.5   Median :0.491  
##  Mean   :0.3127   Mean   :164.5   Mean   : 327.5   Mean   :0.492  
##  3rd Qu.:0.3750   3rd Qu.:227.8   3rd Qu.: 454.8   3rd Qu.:0.536  
##  Max.   :1.0000   Max.   :730.0   Max.   :1421.0   Max.   :1.000  
##                                                                   
##       eFG%              FT              FTA              FT%        
##  Min.   :0.1000   Min.   :  0.00   Min.   :  0.00   Min.   :0.0000  
##  1st Qu.:0.4750   1st Qu.: 29.25   1st Qu.: 39.25   1st Qu.:0.6880  
##  Median :0.5070   Median : 67.00   Median : 91.00   Median :0.7695  
##  Mean   :0.5051   Mean   :100.50   Mean   :129.71   Mean   :0.7472  
##  3rd Qu.:0.5370   3rd Qu.:131.75   3rd Qu.:170.25   3rd Qu.:0.8353  
##  Max.   :0.8750   Max.   :746.00   Max.   :881.00   Max.   :1.0000  
##                                                                     
##       ORB              DRB              TRB               AST       
##  Min.   :  0.00   Min.   :  0.00   Min.   :   0.00   Min.   :  0.0  
##  1st Qu.: 16.00   1st Qu.: 78.25   1st Qu.:  99.25   1st Qu.: 37.0  
##  Median : 35.00   Median :164.00   Median : 205.50   Median : 82.0  
##  Mean   : 55.46   Mean   :186.32   Mean   : 241.77   Mean   :127.3  
##  3rd Qu.: 75.75   3rd Qu.:252.75   3rd Qu.: 328.25   3rd Qu.:165.5  
##  Max.   :345.00   Max.   :817.00   Max.   :1116.00   Max.   :906.0  
##                                                                     
##       STL              BLK              TOV               PF       
##  Min.   :  0.00   Min.   :  0.00   Min.   :  0.00   Min.   :  0.0  
##  1st Qu.: 18.25   1st Qu.:  7.00   1st Qu.: 31.25   1st Qu.: 61.0  
##  Median : 39.00   Median : 17.00   Median : 61.00   Median :114.0  
##  Mean   : 43.28   Mean   : 26.06   Mean   : 75.18   Mean   :110.7  
##  3rd Qu.: 60.00   3rd Qu.: 33.75   3rd Qu.:106.00   3rd Qu.:153.8  
##  Max.   :157.00   Max.   :214.00   Max.   :464.00   Max.   :278.0  
##                                                                    
##       PTS          Salary17_18      
##  Min.   :   3.0   Min.   :   17224  
##  1st Qu.: 209.2   1st Qu.: 1518316  
##  Median : 497.0   Median : 3519283  
##  Mean   : 594.5   Mean   : 7106258  
##  3rd Qu.: 841.2   3rd Qu.:10812701  
##  Max.   :2558.0   Max.   :34682550  
## 

b.Data Exploration

Per-Game stats:

The original dataset includes whole-season statistics (e.g., total points, total assists) for each player. However, these cumulative totals can be misleading when comparing players who played different numbers of games.

Per-game statistics provide a more accurate representation of a player’s average performance, making comparisons fairer.

Some players may not play the entire season due to injuries, resting, or other factors. As a result, their cumulative season totals could appear lower, even if they have strong performances when they are on the court.

By calculating per-game statistics (e.g., PPG - Points Per Game, MPG - Minutes Per Game), we normalize the data to reflect a player’s contribution in each game they play, rather than across an entire season.

Creation of Per-Game Statistics

The dataset originally contained cumulative season totals (e.g., total points, total minutes played)

MPG (Minutes Per Game): MP/G

PPG (Points Per Game): PTS/G

APG (Assists Per Game): AST/G

RPG (Rebounds Per Game): TRB/G

TOPG (Turnovers Per Game): TOV/G

BPG (Blocks Per Game): BLK/G

SPG (Steals Per Game): STL/G

stats_and_salary <- stats_and_salary %>%
  mutate(MPG = MP / G, PPG = PTS / G, APG = AST / G, 
         RPG = TRB / G, TOPG = TOV / G, BPG = BLK / G, 
         SPG = STL / G)
head(stats_and_salary)
##            Player Year Pos Age  Tm  G   MP  PER  FG FGA   FG% 3P 3PA   3P%  2P
## 1    A.J. Hammons 2017   C  24 DAL 22  163  8.4  17  42 0.405  5  10 0.500  12
## 2    Aaron Brooks 2017  PG  32 IND 65  894  9.5 121 300 0.403 48 128 0.375  73
## 3    Aaron Gordon 2017  SF  21 ORL 80 2298 14.4 393 865 0.454 77 267 0.288 316
## 4 Al-Farouq Aminu 2017  SF  26 POR 61 1773 11.3 183 466 0.393 70 212 0.330 113
## 5      Al Horford 2017   C  30 BOS 68 2193 17.7 379 801 0.473 86 242 0.355 293
## 6    Al Jefferson 2017   C  32 IND 66  931 18.9 235 471 0.499  0   1 0.000 235
##   2PA   2P%  eFG%  FT FTA   FT% ORB DRB TRB AST STL BLK TOV  PF  PTS
## 1  32 0.375 0.464   9  20 0.450   8  28  36   4   1  13  10  21   48
## 2 172 0.424 0.483  32  40 0.800  18  51  69 125  25   9  66  93  322
## 3 598 0.528 0.499 156 217 0.719 116 289 405 150  64  40  89 172 1019
## 4 254 0.445 0.468  96 136 0.706  77 374 451  99  60  44  94 102  532
## 5 559 0.524 0.527 108 135 0.800  95 369 464 337  52  87 116 138  952
## 6 470 0.500 0.499  65  85 0.765  75 203 278  57  19  16  33 125  535
##   Salary17_18       MPG       PPG       APG      RPG      TOPG       BPG
## 1     1312611  7.409091  2.181818 0.1818182 1.636364 0.4545455 0.5909091
## 2     2116955 13.753846  4.953846 1.9230769 1.061538 1.0153846 0.1384615
## 3     5504420 28.725000 12.737500 1.8750000 5.062500 1.1125000 0.5000000
## 4     7319035 29.065574  8.721311 1.6229508 7.393443 1.5409836 0.7213115
## 5    27734405 32.250000 14.000000 4.9558824 6.823529 1.7058824 1.2794118
## 6     9769821 14.106061  8.106061 0.8636364 4.212121 0.5000000 0.2424242
##          SPG
## 1 0.04545455
## 2 0.38461538
## 3 0.80000000
## 4 0.98360656
## 5 0.76470588
## 6 0.28787879

Now we can only keep our per-game stats for analysis by removing the cumulative stats of the player for entire season.

per_game_stats <- stats_and_salary %>% select(Player, Tm, MPG, PPG, APG, RPG, TOPG, BPG, SPG,  Salary17_18)
head(per_game_stats)
##            Player  Tm       MPG       PPG       APG      RPG      TOPG
## 1    A.J. Hammons DAL  7.409091  2.181818 0.1818182 1.636364 0.4545455
## 2    Aaron Brooks IND 13.753846  4.953846 1.9230769 1.061538 1.0153846
## 3    Aaron Gordon ORL 28.725000 12.737500 1.8750000 5.062500 1.1125000
## 4 Al-Farouq Aminu POR 29.065574  8.721311 1.6229508 7.393443 1.5409836
## 5      Al Horford BOS 32.250000 14.000000 4.9558824 6.823529 1.7058824
## 6    Al Jefferson IND 14.106061  8.106061 0.8636364 4.212121 0.5000000
##         BPG        SPG Salary17_18
## 1 0.5909091 0.04545455     1312611
## 2 0.1384615 0.38461538     2116955
## 3 0.5000000 0.80000000     5504420
## 4 0.7213115 0.98360656     7319035
## 5 1.2794118 0.76470588    27734405
## 6 0.2424242 0.28787879     9769821

correlation-1

library(corrplot)
## corrplot 0.95 loaded
library(dplyr)

numeric_columns <- per_game_stats %>% 
  select(MPG, PPG, APG, RPG, TOPG, BPG, SPG, Salary17_18)

cor_matrix <- cor(numeric_columns, use = "complete.obs")

corrplot(cor_matrix, 
         method = "circle",    
         type = "upper",       
         tl.col = "black",     
         tl.srt = 45,          
         title = "Correlation Plot for Salary and Stats", 
         mar = c(0, 0, 1, 0))  

Correlation-2

library(dplyr)
library(GGally)
## Loading required package: ggplot2
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
stats_salary_cor <- 
  per_game_stats %>% 
  select(Salary17_18, PPG, MPG, TOPG, RPG, SPG, APG)
ggpairs(stats_salary_cor)

By observing these two plots:

The Strength of correlation between the variables is ranked as follows: PPG>MPG>TOPG>RPG>PER>SPG>APG

The number of turnovers (TOPG) made by players shows a positive correlation with their salary. We interpreted this as: “The more turnovers a player makes, the more involved they are in ball movements during the game.“

This could suggest that players who make turnovers might be more important to their team, possibly due to their aggressive playstyle.

We realize that this interpretation may not be fully accurate. For more precise analysis, we should consider additional data, such as how long each player holds the ball during games.

Let’s visualize a scatter plot between PPG and salary as they are highly correlated.

library(dplyr)
per_game_stats <- per_game_stats %>% 
  rename(Team = Tm)
library(plotly)
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
plot_ly(data = per_game_stats, x = ~Salary17_18, y = ~PPG, color = ~Team,
        hoverinfo = "text",
        text = ~paste("Player: ", Player,
                      "<br>Salary: ", format(Salary17_18, big.mark = ","),"$",
                      "<br>PPG: ", round(PPG, digits = 3),
                      "<br>Team: ", Team)) %>% 
  layout(
    title = "Salary vs Point Per Game",
    xaxis = list(title = "Salary USD"),
    yaxis = list(title = "Point per Game")
  )
## No trace type specified:
##   Based on info supplied, a 'scatter' trace seems appropriate.
##   Read more about this trace type -> https://plotly.com/r/reference/#scatter
## No scatter mode specifed:
##   Setting the mode to markers
##   Read more about this attribute -> https://plotly.com/r/reference/#scatter-mode
## Warning in RColorBrewer::brewer.pal(N, "Set2"): n too large, allowed maximum for palette Set2 is 8
## Returning the palette you asked for with that many colors
## Warning in RColorBrewer::brewer.pal(N, "Set2"): n too large, allowed maximum for palette Set2 is 8
## Returning the palette you asked for with that many colors

If you hover on the points in this plot, you can check the player names. As you can tell the most paid player is Stephen Curry.

Linear regression:

library(ggplot2)
per_game_stats %>% 
  ggplot(aes(x = Salary17_18, y = PPG)) + 
  geom_point() + 
  geom_smooth(method = "lm") 
## `geom_smooth()` using formula = 'y ~ x'

You can see a general upward trend, which means that as players score more points per game, their salaries tend to be higher.

The blue line is a trend line that shows this overall pattern, and the shaded area around it represents the range where most data points are likely to fall, showing confidence in this trend.

In simple terms, players who score more points usually earn higher salaries.

stats_salary_regression <- 
  per_game_stats %>% select(Salary17_18, MPG:SPG)
lm(Salary17_18~., data=stats_salary_regression)
## 
## Call:
## lm(formula = Salary17_18 ~ ., data = stats_salary_regression)
## 
## Coefficients:
## (Intercept)          MPG          PPG          APG          RPG         TOPG  
##    -2792909        30565       686815      1059087       916087     -2709447  
##         BPG          SPG  
##      470136       631255

Scoring points, assisting, and rebounding contribute the most to higher salaries. Turnovers (losing possession) have a large negative impact on salary.

Defensive stats like blocks and steals also contribute positively but to a lesser extent than scoring and playmaking skills.

d. Data Preprocessing

Earlier in Correlation analysis we saw that even turnovers have a bit of positive impact over a player’s salary and we related it to a player’s aggressive playstyle, if a player is involved more in ball movements he tends to commit turn overs, so here we can a create a variable called as Aggressiveness.

If a player’s turnovers per game are equal to or above this average, they’re labeled as “Yes” for Aggressiveness (meaning they turn over the ball relatively often).

Apart from this we can also observe that MPG (minutes per game) also have a positive relation with the salary. Players who generally trusted by their coaches tend to play more on court and tend to score more which boosts their salaries, Hence we can create another variable called Trusted.

If a player’s minutes per game are equal to or above this average, they’re labeled as “Yes” for Trust (meaning the coach plays them often, indicating trust).

avg.minutes <- mean(per_game_stats$MPG)
avg.turnover <- mean(per_game_stats$TOPG)
per_game_stats$Trusted <- as.factor(ifelse(per_game_stats$MPG >= avg.minutes, "Yes", "No"))
per_game_stats$Agressiveness <- as.factor(ifelse(per_game_stats$TOPG >= avg.turnover, "Yes", "No"))
head(per_game_stats)
##            Player Team       MPG       PPG       APG      RPG      TOPG
## 1    A.J. Hammons  DAL  7.409091  2.181818 0.1818182 1.636364 0.4545455
## 2    Aaron Brooks  IND 13.753846  4.953846 1.9230769 1.061538 1.0153846
## 3    Aaron Gordon  ORL 28.725000 12.737500 1.8750000 5.062500 1.1125000
## 4 Al-Farouq Aminu  POR 29.065574  8.721311 1.6229508 7.393443 1.5409836
## 5      Al Horford  BOS 32.250000 14.000000 4.9558824 6.823529 1.7058824
## 6    Al Jefferson  IND 14.106061  8.106061 0.8636364 4.212121 0.5000000
##         BPG        SPG Salary17_18 Trusted Agressiveness
## 1 0.5909091 0.04545455     1312611      No            No
## 2 0.1384615 0.38461538     2116955      No            No
## 3 0.5000000 0.80000000     5504420     Yes            No
## 4 0.7213115 0.98360656     7319035     Yes           Yes
## 5 1.2794118 0.76470588    27734405     Yes           Yes
## 6 0.2424242 0.28787879     9769821      No            No
per_game_stats %>% 
  ggplot(aes(x = Salary17_18, y = PPG, colour = Agressiveness)) + 
  geom_point() + 
  geom_smooth(method="lm")
## `geom_smooth()` using formula = 'y ~ x'

The data points are color-coded by “Aggressiveness,” which is based on whether the player has an above-average or below-average number of turnovers (TOPG).

Here, players labeled “Yes” in teal have higher turnovers (more aggressive), while players labeled “No” in red have fewer turnovers. The trend lines for each group show the general relationship between salary and points per game for players with different levels of aggressiveness.

Positive Salary-Performance Trend: As salary increases, players generally score more points per game, which indicates that higher-paid players tend to perform better in terms of scoring.

Aggressiveness Impact: The teal line (for aggressive players) is above the red line, suggesting that players who are more aggressive (higher turnovers) tend to have slightly higher PPG at a given salary level compared to less aggressive players.

per_game_stats$TrustedYes <- ifelse(per_game_stats$Trusted == "Yes", 1, 0)
per_game_stats$AgressivenessYes <- ifelse(per_game_stats$Agressiveness == "Yes", 1, 0)

head(per_game_stats)
##            Player Team       MPG       PPG       APG      RPG      TOPG
## 1    A.J. Hammons  DAL  7.409091  2.181818 0.1818182 1.636364 0.4545455
## 2    Aaron Brooks  IND 13.753846  4.953846 1.9230769 1.061538 1.0153846
## 3    Aaron Gordon  ORL 28.725000 12.737500 1.8750000 5.062500 1.1125000
## 4 Al-Farouq Aminu  POR 29.065574  8.721311 1.6229508 7.393443 1.5409836
## 5      Al Horford  BOS 32.250000 14.000000 4.9558824 6.823529 1.7058824
## 6    Al Jefferson  IND 14.106061  8.106061 0.8636364 4.212121 0.5000000
##         BPG        SPG Salary17_18 Trusted Agressiveness TrustedYes
## 1 0.5909091 0.04545455     1312611      No            No          0
## 2 0.1384615 0.38461538     2116955      No            No          0
## 3 0.5000000 0.80000000     5504420     Yes            No          1
## 4 0.7213115 0.98360656     7319035     Yes           Yes          1
## 5 1.2794118 0.76470588    27734405     Yes           Yes          1
## 6 0.2424242 0.28787879     9769821      No            No          0
##   AgressivenessYes
## 1                0
## 2                0
## 3                0
## 4                1
## 5                1
## 6                0
library(dplyr)
per_game_stats <- per_game_stats %>% select(-Trusted, -Agressiveness)
head(per_game_stats)
##            Player Team       MPG       PPG       APG      RPG      TOPG
## 1    A.J. Hammons  DAL  7.409091  2.181818 0.1818182 1.636364 0.4545455
## 2    Aaron Brooks  IND 13.753846  4.953846 1.9230769 1.061538 1.0153846
## 3    Aaron Gordon  ORL 28.725000 12.737500 1.8750000 5.062500 1.1125000
## 4 Al-Farouq Aminu  POR 29.065574  8.721311 1.6229508 7.393443 1.5409836
## 5      Al Horford  BOS 32.250000 14.000000 4.9558824 6.823529 1.7058824
## 6    Al Jefferson  IND 14.106061  8.106061 0.8636364 4.212121 0.5000000
##         BPG        SPG Salary17_18 TrustedYes AgressivenessYes
## 1 0.5909091 0.04545455     1312611          0                0
## 2 0.1384615 0.38461538     2116955          0                0
## 3 0.5000000 0.80000000     5504420          1                0
## 4 0.7213115 0.98360656     7319035          1                1
## 5 1.2794118 0.76470588    27734405          1                1
## 6 0.2424242 0.28787879     9769821          0                0

Let’s re arrange the columns in a proper order.

library(dplyr)
per_game_stats <- per_game_stats %>%
  select(Player, Team, MPG, PPG, APG, RPG, TOPG, BPG, SPG, TrustedYes, AgressivenessYes, Salary17_18)
head(per_game_stats)
##            Player Team       MPG       PPG       APG      RPG      TOPG
## 1    A.J. Hammons  DAL  7.409091  2.181818 0.1818182 1.636364 0.4545455
## 2    Aaron Brooks  IND 13.753846  4.953846 1.9230769 1.061538 1.0153846
## 3    Aaron Gordon  ORL 28.725000 12.737500 1.8750000 5.062500 1.1125000
## 4 Al-Farouq Aminu  POR 29.065574  8.721311 1.6229508 7.393443 1.5409836
## 5      Al Horford  BOS 32.250000 14.000000 4.9558824 6.823529 1.7058824
## 6    Al Jefferson  IND 14.106061  8.106061 0.8636364 4.212121 0.5000000
##         BPG        SPG TrustedYes AgressivenessYes Salary17_18
## 1 0.5909091 0.04545455          0                0     1312611
## 2 0.1384615 0.38461538          0                0     2116955
## 3 0.5000000 0.80000000          1                0     5504420
## 4 0.7213115 0.98360656          1                1     7319035
## 5 1.2794118 0.76470588          1                1    27734405
## 6 0.2424242 0.28787879          0                0     9769821

The dataset appears clean and does not require extensive preprocessing. Player statistics such as PPG, MPG, and other performance metrics are inherently meaningful and directly interpretable in their current form, making scaling unnecessary. These values represent individual player performances, and altering them would distort their real-world significance.

Additionally, there are no apparent missing values or extreme outliers based on the summary statistics, indicating that the data is ready for analysis without major cleaning. However, as part of preprocessing, dummy variables will be created for categorical variables like Trusted and Aggressiveness to ensure compatibility with machine learning models that require numerical inputs.

####e.Clustering

Pre-processing

We can exclude non numeric data for clustering like, team, Player, etc

data_for_clustering <- per_game_stats %>%
  select(MPG, PPG, APG, RPG, TOPG, BPG, SPG, TrustedYes, AgressivenessYes, Salary17_18)

Determining the optimal number of clusters

1.Elbow Method

library(ggplot2)
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
set.seed(123)
wss <- sapply(1:10, function(k) {
  kmeans(data_for_clustering, centers = k, nstart = 25)$tot.withinss
})

ggplot(data.frame(k = 1:10, wss = wss), aes(x = k, y = wss)) +
  geom_line() + 
  geom_point() +
  labs(title = "Elbow Method for Determining Optimal Clusters", x = "Number of Clusters", y = "Within-cluster Sum of Squares")

The optimal number of clusters appears to be 3. This is because the WSS continues to decrease after k=3, but the reduction become less steep at k = 3, indicating adding more clusters does not improve the clustering significantly.

2.Silhouette Method:

library(cluster)
sil_scores <- sapply(2:10, function(k) {
  km <- kmeans(data_for_clustering, centers = k, nstart = 25)
  silhouette(km$cluster, dist(data_for_clustering))[, 3]
})

sil_plot <- ggplot(data.frame(k = 2:10, silhouette = sapply(sil_scores, mean)), aes(x = k, y = silhouette)) +
  geom_line() + geom_point() +
  labs(title = "Silhouette Method for Optimal Clusters", x = "Number of Clusters", y = "Average Silhouette Score")
print(sil_plot)

Here we can observe that, 3 is the optimal number of clusters as it has the highest Average Silhouette Score.

f.Clustering

set.seed(123)
kmeans_result <- kmeans(data_for_clustering, centers = 3, nstart = 25)
per_game_stats$Cluster <- as.factor(kmeans_result$cluster)

Now let’s visualize the clusters with PCA.

library(ggplot2)
library(FactoMineR)

pca_result <- prcomp(data_for_clustering, scale. = TRUE)
pca_df <- data.frame(pca_result$x, Cluster = as.factor(kmeans_result$cluster))
ggplot(pca_df, aes(x = PC1, y = PC2, color = Cluster)) +
  geom_point(size = 3) +
  labs(title = "PCA Projection of Clustering Results", x = "PC1", y = "PC2") +
  theme_minimal()

observations:

Cluster 1 (RED) seems to form a more compact group

Cluster 2 (GREEN) shows a more spread out group

Cluster 3 (Blue) is more separated and spread, indicating that the players in this cluster may have a different set of characteristics compared to the others.

table(per_game_stats$Cluster, per_game_stats$TrustedYes)
##    
##       0   1
##   1  16  79
##   2 205  95
##   3   1  46

This table shows how the variable TrustedYes is distributed across the different clusters.

  1. Cluster 1 has 16 players with TrustedYes = 0 and 70 with TrustedYes = 1, indicating that most of the players in this cluster are trusted by their coach

  2. Cluster 2 has 205 players with TrustedYes = 0 and 95 with TrustedYes = 1, indicating that this cluster has a higher number of non-trusted players.

  3. Cluster 3 has 1 players with TrustedYes = 0 and 46 with TrustedYes = 1, indicating that this cluster has almost entirely trusted players.

This suggests that cluster 3 may be the cluster most associated with trusted players, while cluster 2 contains a more balanced mix, and cluster 1 is skewed towards trusted players.

table(per_game_stats$Cluster, per_game_stats$AgressivenessYes)
##    
##       0   1
##   1  40  55
##   2 220  80
##   3   4  43

This table shows how the variable AgressivenessYes is distributed across the different clusters.

  1. Cluster 1 has 40 players with AgressivenessYes = 0 and 55 players with AgressivenessYes = 1, showing a fairly balanced distribution.

  2. cluster 2 has 220 players with AgressivenessYes = 0 and 80 with AgressivenessYes = 1, indicating that this cluster has a higher number of non-aggressive players.

  3. cluster 3 has a 4 players with AgressivenessYes = 0 and 43 with AgressivenessYes = 1, suggesting that it contains a high proportion of aggressive players.

Cluster 3 has the most aggressive players, while cluster 2 has a higher proportion of non-aggressive players.

stats_salary_regression <- 
  per_game_stats %>% select(MPG, PPG, APG, RPG, TOPG, BPG, SPG, TrustedYes,AgressivenessYes, Salary17_18 )
lm(Salary17_18~ TrustedYes * AgressivenessYes, data=stats_salary_regression)
## 
## Call:
## lm(formula = Salary17_18 ~ TrustedYes * AgressivenessYes, data = stats_salary_regression)
## 
## Coefficients:
##                 (Intercept)                   TrustedYes  
##                     2914582                      5125780  
##            AgressivenessYes  TrustedYes:AgressivenessYes  
##                      969783                      3518647

Intercept (2,914,582): This is the baseline salary for a player who is neither trusted nor aggressive.

TrustedYes (5,125,780): Players trusted by the coach (i.e., those who play more minutes) earn significantly more, even when adjusting for other factors.

AggressivenessYes (969,783): More aggressive players (those with higher turnovers) also have a slight salary increase.

TrustedYes(3,518,647): When a player is both trusted and aggressive, their salary further increases significantly.

Players who are both trusted by their coach (play more minutes) and play aggressively (higher turnovers) tend to have higher salaries. The trend lines in the plot confirm that aggressive players tend to score more points per game at similar salary levels.

f. Classification

stepwise model:

Here let’s include all the variables, second order terms and interaction terms in the model and then perform stepwise regression to identify which combination comes out as the best ones.

library(caret)
## Loading required package: lattice
model2 <- lm(Salary17_18 ~ (MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + AgressivenessYes)^2 + 
                        I(MPG^2) + I(PPG^2) + I(APG^2) + I(RPG^2) + I(TOPG^2) + I(BPG^2) + I(SPG^2) +
                        I(TrustedYes^2) + I(AgressivenessYes^2), data = per_game_stats,trControl = train_control)
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
model_stepwise <- step(model2, direction = "both", trace = 1)
## Start:  AIC=13668.5
## Salary17_18 ~ (MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes)^2 + I(MPG^2) + I(PPG^2) + I(APG^2) + I(RPG^2) + 
##     I(TOPG^2) + I(BPG^2) + I(SPG^2) + I(TrustedYes^2) + I(AgressivenessYes^2)
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13668.5
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(MPG^2) + I(PPG^2) + I(APG^2) + I(RPG^2) + 
##     I(TOPG^2) + I(BPG^2) + I(SPG^2) + I(TrustedYes^2) + MPG:PPG + 
##     MPG:APG + MPG:RPG + MPG:TOPG + MPG:BPG + MPG:SPG + MPG:TrustedYes + 
##     MPG:AgressivenessYes + PPG:APG + PPG:RPG + PPG:TOPG + PPG:BPG + 
##     PPG:SPG + PPG:TrustedYes + PPG:AgressivenessYes + APG:RPG + 
##     APG:TOPG + APG:BPG + APG:SPG + APG:TrustedYes + APG:AgressivenessYes + 
##     RPG:TOPG + RPG:BPG + RPG:SPG + RPG:TrustedYes + RPG:AgressivenessYes + 
##     TOPG:BPG + TOPG:SPG + TOPG:TrustedYes + TOPG:AgressivenessYes + 
##     BPG:SPG + BPG:TrustedYes + BPG:AgressivenessYes + SPG:TrustedYes + 
##     SPG:AgressivenessYes + TrustedYes:AgressivenessYes
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13668.5
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(MPG^2) + I(PPG^2) + I(APG^2) + I(RPG^2) + 
##     I(TOPG^2) + I(BPG^2) + I(SPG^2) + MPG:PPG + MPG:APG + MPG:RPG + 
##     MPG:TOPG + MPG:BPG + MPG:SPG + MPG:TrustedYes + MPG:AgressivenessYes + 
##     PPG:APG + PPG:RPG + PPG:TOPG + PPG:BPG + PPG:SPG + PPG:TrustedYes + 
##     PPG:AgressivenessYes + APG:RPG + APG:TOPG + APG:BPG + APG:SPG + 
##     APG:TrustedYes + APG:AgressivenessYes + RPG:TOPG + RPG:BPG + 
##     RPG:SPG + RPG:TrustedYes + RPG:AgressivenessYes + TOPG:BPG + 
##     TOPG:SPG + TOPG:TrustedYes + TOPG:AgressivenessYes + BPG:SPG + 
##     BPG:TrustedYes + BPG:AgressivenessYes + SPG:TrustedYes + 
##     SPG:AgressivenessYes + TrustedYes:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - MPG:RPG                      1 1.5015e+10 9.3645e+15 13666
## - APG:RPG                      1 2.8404e+10 9.3645e+15 13666
## - PPG:TrustedYes               1 1.3977e+11 9.3646e+15 13666
## - MPG:PPG                      1 2.3557e+11 9.3647e+15 13666
## - TOPG:TrustedYes              1 2.9463e+11 9.3648e+15 13666
## - RPG:TOPG                     1 3.3107e+11 9.3648e+15 13666
## - PPG:APG                      1 3.4344e+11 9.3648e+15 13666
## - APG:TOPG                     1 4.8873e+11 9.3650e+15 13666
## - APG:BPG                      1 1.1574e+12 9.3657e+15 13667
## - I(TOPG^2)                    1 1.3109e+12 9.3658e+15 13667
## - I(MPG^2)                     1 1.3810e+12 9.3659e+15 13667
## - RPG:AgressivenessYes         1 1.7359e+12 9.3662e+15 13667
## - TOPG:AgressivenessYes        1 2.3868e+12 9.3669e+15 13667
## - MPG:TOPG                     1 2.7048e+12 9.3672e+15 13667
## - I(RPG^2)                     1 2.7343e+12 9.3672e+15 13667
## - I(PPG^2)                     1 3.9300e+12 9.3684e+15 13667
## - PPG:RPG                      1 4.7660e+12 9.3693e+15 13667
## - RPG:BPG                      1 6.3516e+12 9.3708e+15 13667
## - MPG:TrustedYes               1 7.2547e+12 9.3717e+15 13667
## - I(SPG^2)                     1 8.9559e+12 9.3734e+15 13667
## - I(BPG^2)                     1 1.3121e+13 9.3776e+15 13667
## - TrustedYes:AgressivenessYes  1 1.3275e+13 9.3778e+15 13667
## - MPG:BPG                      1 1.6638e+13 9.3811e+15 13667
## - MPG:AgressivenessYes         1 1.7470e+13 9.3820e+15 13667
## - TOPG:SPG                     1 1.8126e+13 9.3826e+15 13667
## - I(APG^2)                     1 1.9578e+13 9.3841e+15 13667
## - RPG:TrustedYes               1 2.0582e+13 9.3851e+15 13668
## - SPG:TrustedYes               1 2.4923e+13 9.3894e+15 13668
## - SPG:AgressivenessYes         1 2.5822e+13 9.3903e+15 13668
## - APG:TrustedYes               1 2.9161e+13 9.3937e+15 13668
## - BPG:TrustedYes               1 2.9270e+13 9.3938e+15 13668
## - RPG:SPG                      1 3.0774e+13 9.3953e+15 13668
## - PPG:TOPG                     1 3.6942e+13 9.4014e+15 13668
## - BPG:AgressivenessYes         1 3.8096e+13 9.4026e+15 13668
## - APG:AgressivenessYes         1 4.1643e+13 9.4061e+15 13668
## <none>                                      9.3645e+15 13668
## - TOPG:BPG                     1 4.5347e+13 9.4098e+15 13669
## - BPG:SPG                      1 4.6122e+13 9.4106e+15 13669
## - MPG:SPG                      1 6.7645e+13 9.4321e+15 13670
## - APG:SPG                      1 7.1384e+13 9.4359e+15 13670
## - PPG:SPG                      1 9.3356e+13 9.4578e+15 13671
## - PPG:BPG                      1 9.3645e+13 9.4581e+15 13671
## - MPG:APG                      1 9.8702e+13 9.4632e+15 13671
## - PPG:AgressivenessYes         1 1.0033e+14 9.4648e+15 13671
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13666.5
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(MPG^2) + I(PPG^2) + I(APG^2) + I(RPG^2) + 
##     I(TOPG^2) + I(BPG^2) + I(SPG^2) + MPG:PPG + MPG:APG + MPG:TOPG + 
##     MPG:BPG + MPG:SPG + MPG:TrustedYes + MPG:AgressivenessYes + 
##     PPG:APG + PPG:RPG + PPG:TOPG + PPG:BPG + PPG:SPG + PPG:TrustedYes + 
##     PPG:AgressivenessYes + APG:RPG + APG:TOPG + APG:BPG + APG:SPG + 
##     APG:TrustedYes + APG:AgressivenessYes + RPG:TOPG + RPG:BPG + 
##     RPG:SPG + RPG:TrustedYes + RPG:AgressivenessYes + TOPG:BPG + 
##     TOPG:SPG + TOPG:TrustedYes + TOPG:AgressivenessYes + BPG:SPG + 
##     BPG:TrustedYes + BPG:AgressivenessYes + SPG:TrustedYes + 
##     SPG:AgressivenessYes + TrustedYes:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - APG:RPG                      1 2.2567e+10 9.3645e+15 13664
## - PPG:TrustedYes               1 1.3614e+11 9.3646e+15 13664
## - MPG:PPG                      1 2.5269e+11 9.3648e+15 13664
## - TOPG:TrustedYes              1 2.9711e+11 9.3648e+15 13664
## - PPG:APG                      1 3.3164e+11 9.3648e+15 13664
## - RPG:TOPG                     1 3.9702e+11 9.3649e+15 13664
## - APG:TOPG                     1 4.8127e+11 9.3650e+15 13664
## - APG:BPG                      1 1.1431e+12 9.3657e+15 13665
## - I(TOPG^2)                    1 1.3426e+12 9.3659e+15 13665
## - I(MPG^2)                     1 1.6173e+12 9.3661e+15 13665
## - RPG:AgressivenessYes         1 1.7265e+12 9.3662e+15 13665
## - TOPG:AgressivenessYes        1 2.3886e+12 9.3669e+15 13665
## - MPG:TOPG                     1 2.7010e+12 9.3672e+15 13665
## - I(RPG^2)                     1 3.0282e+12 9.3675e+15 13665
## - I(PPG^2)                     1 3.9830e+12 9.3685e+15 13665
## - RPG:BPG                      1 6.3702e+12 9.3709e+15 13665
## - MPG:TrustedYes               1 7.2413e+12 9.3718e+15 13665
## - PPG:RPG                      1 7.8801e+12 9.3724e+15 13665
## - I(SPG^2)                     1 9.0281e+12 9.3735e+15 13665
## - TrustedYes:AgressivenessYes  1 1.3291e+13 9.3778e+15 13665
## - I(BPG^2)                     1 1.3519e+13 9.3780e+15 13665
## - MPG:AgressivenessYes         1 1.7514e+13 9.3820e+15 13665
## - TOPG:SPG                     1 1.8183e+13 9.3827e+15 13665
## - I(APG^2)                     1 1.9703e+13 9.3842e+15 13665
## - SPG:TrustedYes               1 2.4942e+13 9.3895e+15 13666
## - MPG:BPG                      1 2.5267e+13 9.3898e+15 13666
## - SPG:AgressivenessYes         1 2.5818e+13 9.3903e+15 13666
## - APG:TrustedYes               1 2.9200e+13 9.3937e+15 13666
## - RPG:TrustedYes               1 3.1523e+13 9.3960e+15 13666
## - RPG:SPG                      1 3.2854e+13 9.3974e+15 13666
## - BPG:TrustedYes               1 3.4066e+13 9.3986e+15 13666
## - PPG:TOPG                     1 3.7622e+13 9.4021e+15 13666
## - BPG:AgressivenessYes         1 3.8428e+13 9.4029e+15 13666
## - APG:AgressivenessYes         1 4.1674e+13 9.4062e+15 13666
## <none>                                      9.3645e+15 13666
## - BPG:SPG                      1 5.0061e+13 9.4146e+15 13667
## - TOPG:BPG                     1 5.1271e+13 9.4158e+15 13667
## - MPG:SPG                      1 6.8224e+13 9.4327e+15 13668
## - APG:SPG                      1 7.1388e+13 9.4359e+15 13668
## + MPG:RPG                      1 1.5015e+10 9.3645e+15 13668
## - PPG:SPG                      1 9.4009e+13 9.4585e+15 13669
## - PPG:AgressivenessYes         1 1.0037e+14 9.4649e+15 13669
## - MPG:APG                      1 1.0054e+14 9.4650e+15 13669
## - PPG:BPG                      1 1.1130e+14 9.4758e+15 13670
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13664.5
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(MPG^2) + I(PPG^2) + I(APG^2) + I(RPG^2) + 
##     I(TOPG^2) + I(BPG^2) + I(SPG^2) + MPG:PPG + MPG:APG + MPG:TOPG + 
##     MPG:BPG + MPG:SPG + MPG:TrustedYes + MPG:AgressivenessYes + 
##     PPG:APG + PPG:RPG + PPG:TOPG + PPG:BPG + PPG:SPG + PPG:TrustedYes + 
##     PPG:AgressivenessYes + APG:TOPG + APG:BPG + APG:SPG + APG:TrustedYes + 
##     APG:AgressivenessYes + RPG:TOPG + RPG:BPG + RPG:SPG + RPG:TrustedYes + 
##     RPG:AgressivenessYes + TOPG:BPG + TOPG:SPG + TOPG:TrustedYes + 
##     TOPG:AgressivenessYes + BPG:SPG + BPG:TrustedYes + BPG:AgressivenessYes + 
##     SPG:TrustedYes + SPG:AgressivenessYes + TrustedYes:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - PPG:TrustedYes               1 1.2878e+11 9.3647e+15 13662
## - MPG:PPG                      1 2.4265e+11 9.3648e+15 13662
## - TOPG:TrustedYes              1 2.8131e+11 9.3648e+15 13662
## - PPG:APG                      1 3.3836e+11 9.3649e+15 13662
## - APG:TOPG                     1 4.5875e+11 9.3650e+15 13662
## - RPG:TOPG                     1 9.1740e+11 9.3654e+15 13662
## - I(TOPG^2)                    1 1.3709e+12 9.3659e+15 13663
## - APG:BPG                      1 1.3873e+12 9.3659e+15 13663
## - I(MPG^2)                     1 1.5949e+12 9.3661e+15 13663
## - RPG:AgressivenessYes         1 1.7141e+12 9.3662e+15 13663
## - TOPG:AgressivenessYes        1 2.3957e+12 9.3669e+15 13663
## - MPG:TOPG                     1 2.6964e+12 9.3672e+15 13663
## - I(PPG^2)                     1 3.9687e+12 9.3685e+15 13663
## - I(RPG^2)                     1 4.2967e+12 9.3688e+15 13663
## - RPG:BPG                      1 6.3632e+12 9.3709e+15 13663
## - MPG:TrustedYes               1 7.2979e+12 9.3718e+15 13663
## - PPG:RPG                      1 7.8581e+12 9.3724e+15 13663
## - I(SPG^2)                     1 9.0295e+12 9.3736e+15 13663
## - TrustedYes:AgressivenessYes  1 1.3327e+13 9.3779e+15 13663
## - I(BPG^2)                     1 1.4235e+13 9.3788e+15 13663
## - MPG:AgressivenessYes         1 1.7586e+13 9.3821e+15 13663
## - TOPG:SPG                     1 1.9341e+13 9.3839e+15 13663
## - I(APG^2)                     1 2.2048e+13 9.3866e+15 13664
## - SPG:TrustedYes               1 2.5007e+13 9.3895e+15 13664
## - MPG:BPG                      1 2.5704e+13 9.3902e+15 13664
## - SPG:AgressivenessYes         1 2.5888e+13 9.3904e+15 13664
## - APG:TrustedYes               1 3.0659e+13 9.3952e+15 13664
## - RPG:TrustedYes               1 3.2392e+13 9.3969e+15 13664
## - BPG:TrustedYes               1 3.4309e+13 9.3988e+15 13664
## - RPG:SPG                      1 3.4845e+13 9.3994e+15 13664
## - PPG:TOPG                     1 3.7628e+13 9.4022e+15 13664
## - BPG:AgressivenessYes         1 3.8697e+13 9.4032e+15 13664
## - APG:AgressivenessYes         1 4.2121e+13 9.4067e+15 13664
## <none>                                      9.3645e+15 13664
## - BPG:SPG                      1 5.0733e+13 9.4153e+15 13665
## - TOPG:BPG                     1 5.9491e+13 9.4240e+15 13665
## - MPG:SPG                      1 6.8269e+13 9.4328e+15 13666
## - APG:SPG                      1 7.8252e+13 9.4428e+15 13666
## + APG:RPG                      1 2.2567e+10 9.3645e+15 13666
## + MPG:RPG                      1 9.1775e+09 9.3645e+15 13666
## - PPG:SPG                      1 9.4076e+13 9.4586e+15 13667
## - PPG:AgressivenessYes         1 1.0057e+14 9.4651e+15 13667
## - MPG:APG                      1 1.0058e+14 9.4651e+15 13667
## - PPG:BPG                      1 1.1143e+14 9.4760e+15 13668
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13662.51
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(MPG^2) + I(PPG^2) + I(APG^2) + I(RPG^2) + 
##     I(TOPG^2) + I(BPG^2) + I(SPG^2) + MPG:PPG + MPG:APG + MPG:TOPG + 
##     MPG:BPG + MPG:SPG + MPG:TrustedYes + MPG:AgressivenessYes + 
##     PPG:APG + PPG:RPG + PPG:TOPG + PPG:BPG + PPG:SPG + PPG:AgressivenessYes + 
##     APG:TOPG + APG:BPG + APG:SPG + APG:TrustedYes + APG:AgressivenessYes + 
##     RPG:TOPG + RPG:BPG + RPG:SPG + RPG:TrustedYes + RPG:AgressivenessYes + 
##     TOPG:BPG + TOPG:SPG + TOPG:TrustedYes + TOPG:AgressivenessYes + 
##     BPG:SPG + BPG:TrustedYes + BPG:AgressivenessYes + SPG:TrustedYes + 
##     SPG:AgressivenessYes + TrustedYes:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - MPG:PPG                      1 1.2435e+11 9.3648e+15 13660
## - TOPG:TrustedYes              1 1.9580e+11 9.3649e+15 13660
## - PPG:APG                      1 3.5038e+11 9.3650e+15 13660
## - APG:TOPG                     1 4.3992e+11 9.3651e+15 13660
## - RPG:TOPG                     1 9.4189e+11 9.3656e+15 13661
## - APG:BPG                      1 1.3415e+12 9.3660e+15 13661
## - I(TOPG^2)                    1 1.4094e+12 9.3661e+15 13661
## - I(MPG^2)                     1 1.5049e+12 9.3662e+15 13661
## - RPG:AgressivenessYes         1 1.7919e+12 9.3665e+15 13661
## - TOPG:AgressivenessYes        1 2.3215e+12 9.3670e+15 13661
## - MPG:TOPG                     1 3.2150e+12 9.3679e+15 13661
## - I(PPG^2)                     1 3.8649e+12 9.3685e+15 13661
## - I(RPG^2)                     1 4.4516e+12 9.3691e+15 13661
## - RPG:BPG                      1 6.2518e+12 9.3709e+15 13661
## - PPG:RPG                      1 7.9969e+12 9.3727e+15 13661
## - I(SPG^2)                     1 9.0416e+12 9.3737e+15 13661
## - MPG:TrustedYes               1 1.0344e+13 9.3750e+15 13661
## - TrustedYes:AgressivenessYes  1 1.3525e+13 9.3782e+15 13661
## - I(BPG^2)                     1 1.4208e+13 9.3789e+15 13661
## - MPG:AgressivenessYes         1 1.9173e+13 9.3838e+15 13661
## - TOPG:SPG                     1 2.0040e+13 9.3847e+15 13662
## - I(APG^2)                     1 2.2053e+13 9.3867e+15 13662
## - SPG:TrustedYes               1 2.4879e+13 9.3895e+15 13662
## - SPG:AgressivenessYes         1 2.5855e+13 9.3905e+15 13662
## - MPG:BPG                      1 2.6646e+13 9.3913e+15 13662
## - APG:TrustedYes               1 3.2221e+13 9.3969e+15 13662
## - RPG:TrustedYes               1 3.2286e+13 9.3969e+15 13662
## - RPG:SPG                      1 3.4717e+13 9.3994e+15 13662
## - BPG:TrustedYes               1 3.4725e+13 9.3994e+15 13662
## - PPG:TOPG                     1 3.7500e+13 9.4022e+15 13662
## - BPG:AgressivenessYes         1 3.8787e+13 9.4034e+15 13662
## - APG:AgressivenessYes         1 4.1996e+13 9.4067e+15 13662
## <none>                                      9.3647e+15 13662
## - BPG:SPG                      1 5.0619e+13 9.4153e+15 13663
## - TOPG:BPG                     1 6.0215e+13 9.4249e+15 13663
## - MPG:SPG                      1 6.8141e+13 9.4328e+15 13664
## - APG:SPG                      1 7.8543e+13 9.4432e+15 13664
## + PPG:TrustedYes               1 1.2878e+11 9.3645e+15 13664
## + APG:RPG                      1 1.5215e+10 9.3646e+15 13664
## + MPG:RPG                      1 7.2262e+09 9.3647e+15 13664
## - PPG:SPG                      1 9.4350e+13 9.4590e+15 13665
## - MPG:APG                      1 1.0330e+14 9.4680e+15 13665
## - PPG:AgressivenessYes         1 1.1137e+14 9.4760e+15 13666
## - PPG:BPG                      1 1.1360e+14 9.4783e+15 13666
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13660.51
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(MPG^2) + I(PPG^2) + I(APG^2) + I(RPG^2) + 
##     I(TOPG^2) + I(BPG^2) + I(SPG^2) + MPG:APG + MPG:TOPG + MPG:BPG + 
##     MPG:SPG + MPG:TrustedYes + MPG:AgressivenessYes + PPG:APG + 
##     PPG:RPG + PPG:TOPG + PPG:BPG + PPG:SPG + PPG:AgressivenessYes + 
##     APG:TOPG + APG:BPG + APG:SPG + APG:TrustedYes + APG:AgressivenessYes + 
##     RPG:TOPG + RPG:BPG + RPG:SPG + RPG:TrustedYes + RPG:AgressivenessYes + 
##     TOPG:BPG + TOPG:SPG + TOPG:TrustedYes + TOPG:AgressivenessYes + 
##     BPG:SPG + BPG:TrustedYes + BPG:AgressivenessYes + SPG:TrustedYes + 
##     SPG:AgressivenessYes + TrustedYes:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - TOPG:TrustedYes              1 1.8670e+11 9.3650e+15 13658
## - PPG:APG                      1 4.1392e+11 9.3652e+15 13658
## - APG:TOPG                     1 4.6939e+11 9.3653e+15 13658
## - RPG:TOPG                     1 8.4681e+11 9.3656e+15 13659
## - APG:BPG                      1 1.2688e+12 9.3661e+15 13659
## - I(TOPG^2)                    1 1.3248e+12 9.3661e+15 13659
## - I(MPG^2)                     1 1.5064e+12 9.3663e+15 13659
## - RPG:AgressivenessYes         1 1.7445e+12 9.3665e+15 13659
## - TOPG:AgressivenessYes        1 2.5184e+12 9.3673e+15 13659
## - I(RPG^2)                     1 4.5352e+12 9.3693e+15 13659
## - MPG:TOPG                     1 4.6731e+12 9.3695e+15 13659
## - RPG:BPG                      1 6.2332e+12 9.3710e+15 13659
## - I(PPG^2)                     1 7.8778e+12 9.3727e+15 13659
## - PPG:RPG                      1 8.1343e+12 9.3729e+15 13659
## - I(SPG^2)                     1 9.1621e+12 9.3739e+15 13659
## - MPG:TrustedYes               1 1.0221e+13 9.3750e+15 13659
## - TrustedYes:AgressivenessYes  1 1.3492e+13 9.3783e+15 13659
## - I(BPG^2)                     1 1.4238e+13 9.3790e+15 13659
## - MPG:AgressivenessYes         1 1.9091e+13 9.3839e+15 13659
## - TOPG:SPG                     1 2.1243e+13 9.3860e+15 13660
## - I(APG^2)                     1 2.1939e+13 9.3867e+15 13660
## - SPG:TrustedYes               1 2.4757e+13 9.3895e+15 13660
## - SPG:AgressivenessYes         1 2.6134e+13 9.3909e+15 13660
## - MPG:BPG                      1 2.7086e+13 9.3919e+15 13660
## - APG:TrustedYes               1 3.2136e+13 9.3969e+15 13660
## - RPG:TrustedYes               1 3.2230e+13 9.3970e+15 13660
## - RPG:SPG                      1 3.4637e+13 9.3994e+15 13660
## - BPG:TrustedYes               1 3.4806e+13 9.3996e+15 13660
## - BPG:AgressivenessYes         1 3.9952e+13 9.4047e+15 13660
## - PPG:TOPG                     1 4.1601e+13 9.4064e+15 13660
## - APG:AgressivenessYes         1 4.2063e+13 9.4068e+15 13660
## <none>                                      9.3648e+15 13660
## - BPG:SPG                      1 5.0510e+13 9.4153e+15 13661
## - TOPG:BPG                     1 6.0183e+13 9.4250e+15 13661
## - MPG:SPG                      1 7.2160e+13 9.4369e+15 13662
## - APG:SPG                      1 7.8712e+13 9.4435e+15 13662
## + MPG:PPG                      1 1.2435e+11 9.3647e+15 13662
## + MPG:RPG                      1 2.0650e+10 9.3648e+15 13662
## + APG:RPG                      1 1.1672e+10 9.3648e+15 13662
## + PPG:TrustedYes               1 1.0479e+10 9.3648e+15 13662
## - MPG:APG                      1 1.0535e+14 9.4701e+15 13664
## - PPG:SPG                      1 1.1119e+14 9.4760e+15 13664
## - PPG:BPG                      1 1.1430e+14 9.4791e+15 13664
## - PPG:AgressivenessYes         1 1.1640e+14 9.4812e+15 13664
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13658.52
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(MPG^2) + I(PPG^2) + I(APG^2) + I(RPG^2) + 
##     I(TOPG^2) + I(BPG^2) + I(SPG^2) + MPG:APG + MPG:TOPG + MPG:BPG + 
##     MPG:SPG + MPG:TrustedYes + MPG:AgressivenessYes + PPG:APG + 
##     PPG:RPG + PPG:TOPG + PPG:BPG + PPG:SPG + PPG:AgressivenessYes + 
##     APG:TOPG + APG:BPG + APG:SPG + APG:TrustedYes + APG:AgressivenessYes + 
##     RPG:TOPG + RPG:BPG + RPG:SPG + RPG:TrustedYes + RPG:AgressivenessYes + 
##     TOPG:BPG + TOPG:SPG + TOPG:AgressivenessYes + BPG:SPG + BPG:TrustedYes + 
##     BPG:AgressivenessYes + SPG:TrustedYes + SPG:AgressivenessYes + 
##     TrustedYes:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - APG:TOPG                     1 4.8242e+11 9.3655e+15 13656
## - PPG:APG                      1 4.9023e+11 9.3655e+15 13656
## - RPG:TOPG                     1 9.5968e+11 9.3659e+15 13657
## - APG:BPG                      1 1.2931e+12 9.3663e+15 13657
## - I(TOPG^2)                    1 1.3005e+12 9.3663e+15 13657
## - I(MPG^2)                     1 1.6787e+12 9.3667e+15 13657
## - RPG:AgressivenessYes         1 1.6907e+12 9.3667e+15 13657
## - TOPG:AgressivenessYes        1 2.4158e+12 9.3674e+15 13657
## - I(RPG^2)                     1 4.5624e+12 9.3695e+15 13657
## - RPG:BPG                      1 6.4570e+12 9.3714e+15 13657
## - I(PPG^2)                     1 7.9625e+12 9.3729e+15 13657
## - MPG:TOPG                     1 8.0629e+12 9.3730e+15 13657
## - PPG:RPG                      1 8.4017e+12 9.3734e+15 13657
## - I(SPG^2)                     1 9.0593e+12 9.3740e+15 13657
## - MPG:TrustedYes               1 1.0039e+13 9.3750e+15 13657
## - I(BPG^2)                     1 1.5517e+13 9.3805e+15 13657
## - TrustedYes:AgressivenessYes  1 1.7744e+13 9.3827e+15 13657
## - MPG:AgressivenessYes         1 1.9305e+13 9.3843e+15 13657
## - TOPG:SPG                     1 2.1930e+13 9.3869e+15 13658
## - I(APG^2)                     1 2.2290e+13 9.3873e+15 13658
## - SPG:TrustedYes               1 2.4640e+13 9.3896e+15 13658
## - SPG:AgressivenessYes         1 2.6352e+13 9.3913e+15 13658
## - MPG:BPG                      1 2.9989e+13 9.3950e+15 13658
## - RPG:TrustedYes               1 3.3102e+13 9.3981e+15 13658
## - RPG:SPG                      1 3.4844e+13 9.3998e+15 13658
## - BPG:TrustedYes               1 3.6029e+13 9.4010e+15 13658
## - BPG:AgressivenessYes         1 3.9777e+13 9.4047e+15 13658
## - PPG:TOPG                     1 4.1778e+13 9.4067e+15 13658
## - APG:AgressivenessYes         1 4.2261e+13 9.4072e+15 13658
## <none>                                      9.3650e+15 13658
## - APG:TrustedYes               1 4.4841e+13 9.4098e+15 13659
## - BPG:SPG                      1 5.1080e+13 9.4161e+15 13659
## - TOPG:BPG                     1 6.0620e+13 9.4256e+15 13659
## - MPG:SPG                      1 7.1973e+13 9.4369e+15 13660
## - APG:SPG                      1 8.0356e+13 9.4453e+15 13660
## + TOPG:TrustedYes              1 1.8670e+11 9.3648e+15 13660
## + MPG:PPG                      1 1.1525e+11 9.3649e+15 13660
## + MPG:RPG                      1 2.6494e+10 9.3649e+15 13660
## + APG:RPG                      1 3.7239e+09 9.3650e+15 13660
## + PPG:TrustedYes               1 1.9928e+07 9.3650e+15 13660
## - PPG:SPG                      1 1.1100e+14 9.4760e+15 13662
## - MPG:APG                      1 1.1454e+14 9.4795e+15 13662
## - PPG:AgressivenessYes         1 1.1648e+14 9.4815e+15 13662
## - PPG:BPG                      1 1.1727e+14 9.4822e+15 13662
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13656.55
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(MPG^2) + I(PPG^2) + I(APG^2) + I(RPG^2) + 
##     I(TOPG^2) + I(BPG^2) + I(SPG^2) + MPG:APG + MPG:TOPG + MPG:BPG + 
##     MPG:SPG + MPG:TrustedYes + MPG:AgressivenessYes + PPG:APG + 
##     PPG:RPG + PPG:TOPG + PPG:BPG + PPG:SPG + PPG:AgressivenessYes + 
##     APG:BPG + APG:SPG + APG:TrustedYes + APG:AgressivenessYes + 
##     RPG:TOPG + RPG:BPG + RPG:SPG + RPG:TrustedYes + RPG:AgressivenessYes + 
##     TOPG:BPG + TOPG:SPG + TOPG:AgressivenessYes + BPG:SPG + BPG:TrustedYes + 
##     BPG:AgressivenessYes + SPG:TrustedYes + SPG:AgressivenessYes + 
##     TrustedYes:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - PPG:APG                      1 1.9708e+11 9.3657e+15 13655
## - RPG:TOPG                     1 1.0724e+12 9.3665e+15 13655
## - I(MPG^2)                     1 1.5912e+12 9.3670e+15 13655
## - RPG:AgressivenessYes         1 1.6351e+12 9.3671e+15 13655
## - APG:BPG                      1 1.6764e+12 9.3671e+15 13655
## - TOPG:AgressivenessYes        1 1.9814e+12 9.3674e+15 13655
## - I(RPG^2)                     1 4.3696e+12 9.3698e+15 13655
## - RPG:BPG                      1 6.7727e+12 9.3722e+15 13655
## - MPG:TOPG                     1 7.7339e+12 9.3732e+15 13655
## - I(TOPG^2)                    1 8.2905e+12 9.3737e+15 13655
## - I(SPG^2)                     1 8.6874e+12 9.3741e+15 13655
## - PPG:RPG                      1 8.8313e+12 9.3743e+15 13655
## - I(PPG^2)                     1 8.9927e+12 9.3744e+15 13655
## - MPG:TrustedYes               1 1.0194e+13 9.3756e+15 13655
## - I(BPG^2)                     1 1.6560e+13 9.3820e+15 13655
## - TrustedYes:AgressivenessYes  1 1.8171e+13 9.3836e+15 13655
## - MPG:AgressivenessYes         1 1.9739e+13 9.3852e+15 13656
## - TOPG:SPG                     1 2.5352e+13 9.3908e+15 13656
## - SPG:TrustedYes               1 2.5554e+13 9.3910e+15 13656
## - SPG:AgressivenessYes         1 2.7871e+13 9.3933e+15 13656
## - MPG:BPG                      1 3.2261e+13 9.3977e+15 13656
## - RPG:TrustedYes               1 3.3311e+13 9.3988e+15 13656
## - RPG:SPG                      1 3.4730e+13 9.4002e+15 13656
## - BPG:TrustedYes               1 3.5548e+13 9.4010e+15 13656
## - BPG:AgressivenessYes         1 3.9295e+13 9.4047e+15 13656
## - I(APG^2)                     1 3.9996e+13 9.4054e+15 13656
## <none>                                      9.3655e+15 13656
## - APG:AgressivenessYes         1 4.3223e+13 9.4087e+15 13657
## - APG:TrustedYes               1 4.6768e+13 9.4122e+15 13657
## - BPG:SPG                      1 5.0618e+13 9.4161e+15 13657
## - PPG:TOPG                     1 5.2181e+13 9.4176e+15 13657
## - TOPG:BPG                     1 6.9170e+13 9.4346e+15 13658
## - MPG:SPG                      1 7.2512e+13 9.4380e+15 13658
## - APG:SPG                      1 8.0613e+13 9.4461e+15 13658
## + APG:TOPG                     1 4.8242e+11 9.3650e+15 13658
## + TOPG:TrustedYes              1 1.9973e+11 9.3653e+15 13658
## + MPG:PPG                      1 1.4378e+11 9.3653e+15 13658
## + MPG:RPG                      1 2.5564e+10 9.3654e+15 13658
## + APG:RPG                      1 7.0298e+09 9.3654e+15 13658
## + PPG:TrustedYes               1 2.7875e+09 9.3655e+15 13658
## - PPG:SPG                      1 1.1130e+14 9.4768e+15 13660
## - MPG:APG                      1 1.1521e+14 9.4807e+15 13660
## - PPG:BPG                      1 1.1679e+14 9.4822e+15 13660
## - PPG:AgressivenessYes         1 1.1804e+14 9.4835e+15 13660
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13654.56
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(MPG^2) + I(PPG^2) + I(APG^2) + I(RPG^2) + 
##     I(TOPG^2) + I(BPG^2) + I(SPG^2) + MPG:APG + MPG:TOPG + MPG:BPG + 
##     MPG:SPG + MPG:TrustedYes + MPG:AgressivenessYes + PPG:RPG + 
##     PPG:TOPG + PPG:BPG + PPG:SPG + PPG:AgressivenessYes + APG:BPG + 
##     APG:SPG + APG:TrustedYes + APG:AgressivenessYes + RPG:TOPG + 
##     RPG:BPG + RPG:SPG + RPG:TrustedYes + RPG:AgressivenessYes + 
##     TOPG:BPG + TOPG:SPG + TOPG:AgressivenessYes + BPG:SPG + BPG:TrustedYes + 
##     BPG:AgressivenessYes + SPG:TrustedYes + SPG:AgressivenessYes + 
##     TrustedYes:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - RPG:TOPG                     1 1.1092e+12 9.3668e+15 13653
## - APG:BPG                      1 1.5482e+12 9.3672e+15 13653
## - RPG:AgressivenessYes         1 1.6194e+12 9.3673e+15 13653
## - I(MPG^2)                     1 1.6196e+12 9.3673e+15 13653
## - TOPG:AgressivenessYes        1 2.0186e+12 9.3677e+15 13653
## - I(RPG^2)                     1 4.2385e+12 9.3699e+15 13653
## - RPG:BPG                      1 6.9016e+12 9.3726e+15 13653
## - MPG:TOPG                     1 8.1566e+12 9.3738e+15 13653
## - I(SPG^2)                     1 8.4942e+12 9.3741e+15 13653
## - I(TOPG^2)                    1 8.7083e+12 9.3744e+15 13653
## - I(PPG^2)                     1 9.2592e+12 9.3749e+15 13653
## - PPG:RPG                      1 9.6370e+12 9.3753e+15 13653
## - MPG:TrustedYes               1 1.0161e+13 9.3758e+15 13653
## - I(BPG^2)                     1 1.6504e+13 9.3822e+15 13653
## - TrustedYes:AgressivenessYes  1 1.7980e+13 9.3836e+15 13653
## - MPG:AgressivenessYes         1 1.9591e+13 9.3852e+15 13654
## - SPG:TrustedYes               1 2.5368e+13 9.3910e+15 13654
## - TOPG:SPG                     1 2.5392e+13 9.3910e+15 13654
## - SPG:AgressivenessYes         1 2.8179e+13 9.3938e+15 13654
## - RPG:TrustedYes               1 3.4016e+13 9.3997e+15 13654
## - MPG:BPG                      1 3.4151e+13 9.3998e+15 13654
## - RPG:SPG                      1 3.5261e+13 9.4009e+15 13654
## - BPG:TrustedYes               1 3.7744e+13 9.4034e+15 13654
## - BPG:AgressivenessYes         1 4.0092e+13 9.4057e+15 13654
## - I(APG^2)                     1 4.1116e+13 9.4068e+15 13654
## <none>                                      9.3657e+15 13655
## - APG:AgressivenessYes         1 4.3279e+13 9.4089e+15 13655
## - APG:TrustedYes               1 4.8112e+13 9.4138e+15 13655
## - BPG:SPG                      1 5.0534e+13 9.4162e+15 13655
## - TOPG:BPG                     1 7.1206e+13 9.4369e+15 13656
## - MPG:SPG                      1 7.3843e+13 9.4395e+15 13656
## - PPG:TOPG                     1 7.9325e+13 9.4450e+15 13656
## + TOPG:TrustedYes              1 2.4793e+11 9.3654e+15 13656
## + PPG:APG                      1 1.9708e+11 9.3655e+15 13656
## + APG:TOPG                     1 1.8926e+11 9.3655e+15 13656
## + MPG:PPG                      1 1.8259e+11 9.3655e+15 13656
## + MPG:RPG                      1 1.3299e+10 9.3656e+15 13657
## + PPG:TrustedYes               1 5.7733e+09 9.3656e+15 13657
## + APG:RPG                      1 1.0364e+09 9.3656e+15 13657
## - APG:SPG                      1 8.6783e+13 9.4524e+15 13657
## - PPG:AgressivenessYes         1 1.1835e+14 9.4840e+15 13658
## - PPG:BPG                      1 1.2137e+14 9.4870e+15 13658
## - PPG:SPG                      1 1.3151e+14 9.4972e+15 13659
## - MPG:APG                      1 1.9011e+14 9.5558e+15 13661
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13652.61
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(MPG^2) + I(PPG^2) + I(APG^2) + I(RPG^2) + 
##     I(TOPG^2) + I(BPG^2) + I(SPG^2) + MPG:APG + MPG:TOPG + MPG:BPG + 
##     MPG:SPG + MPG:TrustedYes + MPG:AgressivenessYes + PPG:RPG + 
##     PPG:TOPG + PPG:BPG + PPG:SPG + PPG:AgressivenessYes + APG:BPG + 
##     APG:SPG + APG:TrustedYes + APG:AgressivenessYes + RPG:BPG + 
##     RPG:SPG + RPG:TrustedYes + RPG:AgressivenessYes + TOPG:BPG + 
##     TOPG:SPG + TOPG:AgressivenessYes + BPG:SPG + BPG:TrustedYes + 
##     BPG:AgressivenessYes + SPG:TrustedYes + SPG:AgressivenessYes + 
##     TrustedYes:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - APG:BPG                      1 1.4991e+12 9.3683e+15 13651
## - I(MPG^2)                     1 1.7599e+12 9.3685e+15 13651
## - TOPG:AgressivenessYes        1 2.2854e+12 9.3690e+15 13651
## - RPG:AgressivenessYes         1 3.6081e+12 9.3704e+15 13651
## - I(RPG^2)                     1 4.3847e+12 9.3711e+15 13651
## - RPG:BPG                      1 6.7756e+12 9.3735e+15 13651
## - I(TOPG^2)                    1 7.7670e+12 9.3745e+15 13651
## - MPG:TOPG                     1 8.5949e+12 9.3754e+15 13651
## - I(SPG^2)                     1 9.0159e+12 9.3758e+15 13651
## - I(PPG^2)                     1 9.3269e+12 9.3761e+15 13651
## - PPG:RPG                      1 1.0279e+13 9.3770e+15 13651
## - MPG:TrustedYes               1 1.0375e+13 9.3771e+15 13651
## - I(BPG^2)                     1 1.6113e+13 9.3829e+15 13651
## - TrustedYes:AgressivenessYes  1 1.7947e+13 9.3847e+15 13652
## - MPG:AgressivenessYes         1 1.9871e+13 9.3866e+15 13652
## - SPG:TrustedYes               1 2.5403e+13 9.3922e+15 13652
## - TOPG:SPG                     1 2.6124e+13 9.3929e+15 13652
## - SPG:AgressivenessYes         1 2.8370e+13 9.3951e+15 13652
## - RPG:TrustedYes               1 3.2907e+13 9.3997e+15 13652
## - MPG:BPG                      1 3.3156e+13 9.3999e+15 13652
## - RPG:SPG                      1 3.6104e+13 9.4029e+15 13652
## - BPG:TrustedYes               1 3.7100e+13 9.4039e+15 13652
## - BPG:AgressivenessYes         1 3.8983e+13 9.4057e+15 13652
## <none>                                      9.3668e+15 13653
## - I(APG^2)                     1 4.3453e+13 9.4102e+15 13653
## - APG:AgressivenessYes         1 4.4710e+13 9.4115e+15 13653
## - APG:TrustedYes               1 4.8817e+13 9.4156e+15 13653
## - BPG:SPG                      1 4.9674e+13 9.4164e+15 13653
## - MPG:SPG                      1 7.3347e+13 9.4401e+15 13654
## - TOPG:BPG                     1 8.1227e+13 9.4480e+15 13654
## - PPG:TOPG                     1 8.1691e+13 9.4485e+15 13654
## + RPG:TOPG                     1 1.1092e+12 9.3657e+15 13655
## + APG:RPG                      1 4.2003e+11 9.3663e+15 13655
## + TOPG:TrustedYes              1 3.9335e+11 9.3664e+15 13655
## + APG:TOPG                     1 2.3990e+11 9.3665e+15 13655
## + PPG:APG                      1 2.3385e+11 9.3665e+15 13655
## + MPG:RPG                      1 9.1131e+10 9.3667e+15 13655
## + MPG:PPG                      1 5.0223e+10 9.3667e+15 13655
## + PPG:TrustedYes               1 6.6670e+08 9.3668e+15 13655
## - APG:SPG                      1 9.0318e+13 9.4571e+15 13655
## - PPG:AgressivenessYes         1 1.2444e+14 9.4912e+15 13656
## - PPG:SPG                      1 1.3341e+14 9.5002e+15 13657
## - PPG:BPG                      1 1.3484e+14 9.5016e+15 13657
## - MPG:APG                      1 1.9187e+14 9.5586e+15 13660
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13650.68
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(MPG^2) + I(PPG^2) + I(APG^2) + I(RPG^2) + 
##     I(TOPG^2) + I(BPG^2) + I(SPG^2) + MPG:APG + MPG:TOPG + MPG:BPG + 
##     MPG:SPG + MPG:TrustedYes + MPG:AgressivenessYes + PPG:RPG + 
##     PPG:TOPG + PPG:BPG + PPG:SPG + PPG:AgressivenessYes + APG:SPG + 
##     APG:TrustedYes + APG:AgressivenessYes + RPG:BPG + RPG:SPG + 
##     RPG:TrustedYes + RPG:AgressivenessYes + TOPG:BPG + TOPG:SPG + 
##     TOPG:AgressivenessYes + BPG:SPG + BPG:TrustedYes + BPG:AgressivenessYes + 
##     SPG:TrustedYes + SPG:AgressivenessYes + TrustedYes:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - I(MPG^2)                     1 1.5141e+12 9.3698e+15 13649
## - TOPG:AgressivenessYes        1 1.7904e+12 9.3700e+15 13649
## - RPG:AgressivenessYes         1 3.4474e+12 9.3717e+15 13649
## - I(RPG^2)                     1 4.0577e+12 9.3723e+15 13649
## - RPG:BPG                      1 6.2239e+12 9.3745e+15 13649
## - MPG:TOPG                     1 8.8921e+12 9.3772e+15 13649
## - I(SPG^2)                     1 9.6523e+12 9.3779e+15 13649
## - I(PPG^2)                     1 9.7113e+12 9.3780e+15 13649
## - PPG:RPG                      1 9.9740e+12 9.3782e+15 13649
## - I(TOPG^2)                    1 1.0346e+13 9.3786e+15 13649
## - MPG:TrustedYes               1 1.0810e+13 9.3791e+15 13649
## - TrustedYes:AgressivenessYes  1 1.9199e+13 9.3875e+15 13650
## - MPG:AgressivenessYes         1 2.1070e+13 9.3893e+15 13650
## - I(BPG^2)                     1 2.1302e+13 9.3896e+15 13650
## - SPG:TrustedYes               1 2.6679e+13 9.3949e+15 13650
## - TOPG:SPG                     1 2.8869e+13 9.3971e+15 13650
## - SPG:AgressivenessYes         1 3.0909e+13 9.3992e+15 13650
## - RPG:TrustedYes               1 3.1770e+13 9.4000e+15 13650
## - BPG:TrustedYes               1 3.5602e+13 9.4039e+15 13650
## - RPG:SPG                      1 3.6403e+13 9.4047e+15 13650
## - BPG:AgressivenessYes         1 3.7899e+13 9.4062e+15 13650
## - MPG:BPG                      1 4.1339e+13 9.4096e+15 13651
## <none>                                      9.3683e+15 13651
## - APG:AgressivenessYes         1 4.3336e+13 9.4116e+15 13651
## - I(APG^2)                     1 4.8333e+13 9.4166e+15 13651
## - BPG:SPG                      1 4.8857e+13 9.4171e+15 13651
## - APG:TrustedYes               1 5.3774e+13 9.4220e+15 13651
## - MPG:SPG                      1 7.8377e+13 9.4466e+15 13652
## + APG:BPG                      1 1.4991e+12 9.3668e+15 13653
## + RPG:TOPG                     1 1.0601e+12 9.3672e+15 13653
## + APG:TOPG                     1 5.7929e+11 9.3677e+15 13653
## + TOPG:TrustedYes              1 4.0676e+11 9.3679e+15 13653
## + PPG:APG                      1 9.2338e+10 9.3682e+15 13653
## + MPG:RPG                      1 8.9598e+10 9.3682e+15 13653
## + MPG:PPG                      1 7.3764e+09 9.3683e+15 13653
## + APG:RPG                      1 5.5695e+08 9.3683e+15 13653
## + PPG:TrustedYes               1 4.5983e+08 9.3683e+15 13653
## - PPG:TOPG                     1 8.6653e+13 9.4549e+15 13653
## - APG:SPG                      1 8.8853e+13 9.4571e+15 13653
## - TOPG:BPG                     1 9.8147e+13 9.4664e+15 13653
## - PPG:AgressivenessYes         1 1.2851e+14 9.4968e+15 13655
## - PPG:SPG                      1 1.3195e+14 9.5002e+15 13655
## - PPG:BPG                      1 1.3506e+14 9.5033e+15 13655
## - MPG:APG                      1 2.4834e+14 9.6166e+15 13660
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13648.75
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(PPG^2) + I(APG^2) + I(RPG^2) + I(TOPG^2) + 
##     I(BPG^2) + I(SPG^2) + MPG:APG + MPG:TOPG + MPG:BPG + MPG:SPG + 
##     MPG:TrustedYes + MPG:AgressivenessYes + PPG:RPG + PPG:TOPG + 
##     PPG:BPG + PPG:SPG + PPG:AgressivenessYes + APG:SPG + APG:TrustedYes + 
##     APG:AgressivenessYes + RPG:BPG + RPG:SPG + RPG:TrustedYes + 
##     RPG:AgressivenessYes + TOPG:BPG + TOPG:SPG + TOPG:AgressivenessYes + 
##     BPG:SPG + BPG:TrustedYes + BPG:AgressivenessYes + SPG:TrustedYes + 
##     SPG:AgressivenessYes + TrustedYes:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - TOPG:AgressivenessYes        1 1.3533e+12 9.3711e+15 13647
## - RPG:AgressivenessYes         1 3.6304e+12 9.3734e+15 13647
## - I(RPG^2)                     1 3.8098e+12 9.3736e+15 13647
## - RPG:BPG                      1 6.3122e+12 9.3761e+15 13647
## - MPG:TOPG                     1 7.4372e+12 9.3772e+15 13647
## - I(SPG^2)                     1 8.6212e+12 9.3784e+15 13647
## - PPG:RPG                      1 1.0768e+13 9.3805e+15 13647
## - I(TOPG^2)                    1 1.1215e+13 9.3810e+15 13647
## - I(PPG^2)                     1 1.3031e+13 9.3828e+15 13647
## - TrustedYes:AgressivenessYes  1 1.8430e+13 9.3882e+15 13648
## - I(BPG^2)                     1 2.1020e+13 9.3908e+15 13648
## - MPG:AgressivenessYes         1 2.1320e+13 9.3911e+15 13648
## - SPG:TrustedYes               1 2.5341e+13 9.3951e+15 13648
## - TOPG:SPG                     1 2.7912e+13 9.3977e+15 13648
## - SPG:AgressivenessYes         1 3.1907e+13 9.4017e+15 13648
## - RPG:TrustedYes               1 3.2099e+13 9.4019e+15 13648
## - BPG:TrustedYes               1 3.4698e+13 9.4045e+15 13648
## - RPG:SPG                      1 3.7390e+13 9.4072e+15 13648
## - BPG:AgressivenessYes         1 3.7793e+13 9.4076e+15 13648
## <none>                                      9.3698e+15 13649
## - MPG:TrustedYes               1 4.2526e+13 9.4123e+15 13649
## - APG:AgressivenessYes         1 4.3139e+13 9.4129e+15 13649
## - MPG:BPG                      1 4.4722e+13 9.4145e+15 13649
## - I(APG^2)                     1 4.8087e+13 9.4179e+15 13649
## - BPG:SPG                      1 5.2863e+13 9.4226e+15 13649
## - APG:TrustedYes               1 5.4718e+13 9.4245e+15 13649
## + I(MPG^2)                     1 1.5141e+12 9.3683e+15 13651
## + APG:BPG                      1 1.2534e+12 9.3685e+15 13651
## + RPG:TOPG                     1 1.1914e+12 9.3686e+15 13651
## + TOPG:TrustedYes              1 6.4223e+11 9.3691e+15 13651
## + MPG:RPG                      1 4.7163e+11 9.3693e+15 13651
## + APG:TOPG                     1 4.4924e+11 9.3693e+15 13651
## + MPG:PPG                      1 3.3284e+11 9.3694e+15 13651
## - MPG:SPG                      1 8.4875e+13 9.4546e+15 13651
## + PPG:APG                      1 1.2261e+11 9.3697e+15 13651
## + PPG:TrustedYes               1 2.0228e+10 9.3698e+15 13651
## + APG:RPG                      1 1.8100e+05 9.3698e+15 13651
## - APG:SPG                      1 8.8782e+13 9.4586e+15 13651
## - PPG:TOPG                     1 9.6768e+13 9.4665e+15 13651
## - TOPG:BPG                     1 1.0529e+14 9.4751e+15 13652
## - PPG:AgressivenessYes         1 1.3019e+14 9.5000e+15 13653
## - PPG:SPG                      1 1.3053e+14 9.5003e+15 13653
## - PPG:BPG                      1 1.4509e+14 9.5149e+15 13654
## - MPG:APG                      1 2.4990e+14 9.6197e+15 13658
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13646.81
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(PPG^2) + I(APG^2) + I(RPG^2) + I(TOPG^2) + 
##     I(BPG^2) + I(SPG^2) + MPG:APG + MPG:TOPG + MPG:BPG + MPG:SPG + 
##     MPG:TrustedYes + MPG:AgressivenessYes + PPG:RPG + PPG:TOPG + 
##     PPG:BPG + PPG:SPG + PPG:AgressivenessYes + APG:SPG + APG:TrustedYes + 
##     APG:AgressivenessYes + RPG:BPG + RPG:SPG + RPG:TrustedYes + 
##     RPG:AgressivenessYes + TOPG:BPG + TOPG:SPG + BPG:SPG + BPG:TrustedYes + 
##     BPG:AgressivenessYes + SPG:TrustedYes + SPG:AgressivenessYes + 
##     TrustedYes:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - RPG:AgressivenessYes         1 3.4497e+12 9.3746e+15 13645
## - I(RPG^2)                     1 4.2658e+12 9.3754e+15 13645
## - RPG:BPG                      1 5.9588e+12 9.3771e+15 13645
## - MPG:TOPG                     1 6.2668e+12 9.3774e+15 13645
## - I(SPG^2)                     1 9.3737e+12 9.3805e+15 13645
## - PPG:RPG                      1 9.8940e+12 9.3810e+15 13645
## - I(PPG^2)                     1 1.2960e+13 9.3841e+15 13645
## - TrustedYes:AgressivenessYes  1 1.8938e+13 9.3901e+15 13646
## - I(TOPG^2)                    1 1.9499e+13 9.3906e+15 13646
## - I(BPG^2)                     1 2.0131e+13 9.3913e+15 13646
## - TOPG:SPG                     1 2.6746e+13 9.3979e+15 13646
## - SPG:TrustedYes               1 2.6788e+13 9.3979e+15 13646
## - MPG:AgressivenessYes         1 2.9446e+13 9.4006e+15 13646
## - SPG:AgressivenessYes         1 3.1236e+13 9.4024e+15 13646
## - RPG:TrustedYes               1 3.1269e+13 9.4024e+15 13646
## - BPG:TrustedYes               1 3.4456e+13 9.4056e+15 13646
## - BPG:AgressivenessYes         1 3.6440e+13 9.4076e+15 13646
## - RPG:SPG                      1 3.7601e+13 9.4087e+15 13647
## <none>                                      9.3711e+15 13647
## - MPG:BPG                      1 4.3380e+13 9.4145e+15 13647
## - MPG:TrustedYes               1 4.3466e+13 9.4146e+15 13647
## - APG:AgressivenessYes         1 4.6460e+13 9.4176e+15 13647
## - I(APG^2)                     1 4.7619e+13 9.4187e+15 13647
## - BPG:SPG                      1 5.2092e+13 9.4232e+15 13647
## - APG:TrustedYes               1 5.3704e+13 9.4248e+15 13647
## + RPG:TOPG                     1 1.3913e+12 9.3697e+15 13649
## + TOPG:AgressivenessYes        1 1.3533e+12 9.3698e+15 13649
## + I(MPG^2)                     1 1.0770e+12 9.3700e+15 13649
## + APG:BPG                      1 8.8401e+11 9.3702e+15 13649
## + MPG:RPG                      1 4.2754e+11 9.3707e+15 13649
## + PPG:APG                      1 1.6515e+11 9.3710e+15 13649
## + MPG:PPG                      1 9.8102e+10 9.3710e+15 13649
## + APG:TOPG                     1 7.4171e+10 9.3711e+15 13649
## + APG:RPG                      1 6.1227e+10 9.3711e+15 13649
## + TOPG:TrustedYes              1 2.7378e+10 9.3711e+15 13649
## + PPG:TrustedYes               1 1.7689e+10 9.3711e+15 13649
## - APG:SPG                      1 8.7457e+13 9.4586e+15 13649
## - MPG:SPG                      1 8.8666e+13 9.4598e+15 13649
## - TOPG:BPG                     1 1.0504e+14 9.4762e+15 13650
## - PPG:TOPG                     1 1.1293e+14 9.4841e+15 13650
## - PPG:SPG                      1 1.3310e+14 9.5042e+15 13651
## - PPG:BPG                      1 1.4374e+14 9.5149e+15 13652
## - PPG:AgressivenessYes         1 1.7402e+14 9.5451e+15 13653
## - MPG:APG                      1 2.5383e+14 9.6250e+15 13657
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13644.98
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(PPG^2) + I(APG^2) + I(RPG^2) + I(TOPG^2) + 
##     I(BPG^2) + I(SPG^2) + MPG:APG + MPG:TOPG + MPG:BPG + MPG:SPG + 
##     MPG:TrustedYes + MPG:AgressivenessYes + PPG:RPG + PPG:TOPG + 
##     PPG:BPG + PPG:SPG + PPG:AgressivenessYes + APG:SPG + APG:TrustedYes + 
##     APG:AgressivenessYes + RPG:BPG + RPG:SPG + RPG:TrustedYes + 
##     TOPG:BPG + TOPG:SPG + BPG:SPG + BPG:TrustedYes + BPG:AgressivenessYes + 
##     SPG:TrustedYes + SPG:AgressivenessYes + TrustedYes:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - I(RPG^2)                     1 2.6680e+12 9.3772e+15 13643
## - MPG:TOPG                     1 7.4564e+12 9.3820e+15 13643
## - RPG:BPG                      1 7.9417e+12 9.3825e+15 13643
## - PPG:RPG                      1 7.9681e+12 9.3825e+15 13643
## - I(SPG^2)                     1 9.8488e+12 9.3844e+15 13643
## - I(PPG^2)                     1 1.3526e+13 9.3881e+15 13644
## - TrustedYes:AgressivenessYes  1 1.9321e+13 9.3939e+15 13644
## - I(TOPG^2)                    1 1.9429e+13 9.3940e+15 13644
## - I(BPG^2)                     1 2.2191e+13 9.3968e+15 13644
## - SPG:TrustedYes               1 2.6436e+13 9.4010e+15 13644
## - TOPG:SPG                     1 2.7370e+13 9.4019e+15 13644
## - SPG:AgressivenessYes         1 3.2144e+13 9.4067e+15 13644
## - MPG:AgressivenessYes         1 3.3631e+13 9.4082e+15 13645
## - RPG:SPG                      1 3.6862e+13 9.4114e+15 13645
## - BPG:TrustedYes               1 4.0573e+13 9.4151e+15 13645
## <none>                                      9.3746e+15 13645
## - APG:AgressivenessYes         1 4.3411e+13 9.4180e+15 13645
## - MPG:BPG                      1 4.4999e+13 9.4196e+15 13645
## - RPG:TrustedYes               1 4.6602e+13 9.4212e+15 13645
## - I(APG^2)                     1 4.6857e+13 9.4214e+15 13645
## - MPG:TrustedYes               1 5.1721e+13 9.4263e+15 13645
## - BPG:SPG                      1 5.3605e+13 9.4282e+15 13646
## - APG:TrustedYes               1 5.4772e+13 9.4293e+15 13646
## + RPG:AgressivenessYes         1 3.4497e+12 9.3711e+15 13647
## + RPG:TOPG                     1 3.4404e+12 9.3711e+15 13647
## - BPG:AgressivenessYes         1 8.2293e+13 9.4569e+15 13647
## + I(MPG^2)                     1 1.2531e+12 9.3733e+15 13647
## + TOPG:AgressivenessYes        1 1.1725e+12 9.3734e+15 13647
## + APG:BPG                      1 7.7346e+11 9.3738e+15 13647
## + MPG:RPG                      1 5.5748e+11 9.3740e+15 13647
## + APG:RPG                      1 4.6423e+11 9.3741e+15 13647
## + MPG:PPG                      1 3.4212e+11 9.3742e+15 13647
## + PPG:APG                      1 1.7539e+11 9.3744e+15 13647
## + APG:TOPG                     1 7.6574e+10 9.3745e+15 13647
## + TOPG:TrustedYes              1 4.4791e+10 9.3745e+15 13647
## + PPG:TrustedYes               1 2.2501e+10 9.3746e+15 13647
## - MPG:SPG                      1 8.7412e+13 9.4620e+15 13647
## - APG:SPG                      1 8.8936e+13 9.4635e+15 13647
## - TOPG:BPG                     1 1.0595e+14 9.4805e+15 13648
## - PPG:TOPG                     1 1.1076e+14 9.4853e+15 13648
## - PPG:SPG                      1 1.3146e+14 9.5060e+15 13649
## - PPG:BPG                      1 1.4037e+14 9.5149e+15 13650
## - PPG:AgressivenessYes         1 1.7082e+14 9.5454e+15 13651
## - MPG:APG                      1 2.5329e+14 9.6279e+15 13655
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13643.1
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(PPG^2) + I(APG^2) + I(TOPG^2) + I(BPG^2) + 
##     I(SPG^2) + MPG:APG + MPG:TOPG + MPG:BPG + MPG:SPG + MPG:TrustedYes + 
##     MPG:AgressivenessYes + PPG:RPG + PPG:TOPG + PPG:BPG + PPG:SPG + 
##     PPG:AgressivenessYes + APG:SPG + APG:TrustedYes + APG:AgressivenessYes + 
##     RPG:BPG + RPG:SPG + RPG:TrustedYes + TOPG:BPG + TOPG:SPG + 
##     BPG:SPG + BPG:TrustedYes + BPG:AgressivenessYes + SPG:TrustedYes + 
##     SPG:AgressivenessYes + TrustedYes:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - MPG:TOPG                     1 7.4697e+12 9.3847e+15 13642
## - I(SPG^2)                     1 9.5675e+12 9.3868e+15 13642
## - PPG:RPG                      1 9.7569e+12 9.3870e+15 13642
## - I(PPG^2)                     1 1.2521e+13 9.3898e+15 13642
## - I(TOPG^2)                    1 1.8271e+13 9.3955e+15 13642
## - TrustedYes:AgressivenessYes  1 1.8916e+13 9.3962e+15 13642
## - SPG:TrustedYes               1 2.6411e+13 9.4037e+15 13642
## - TOPG:SPG                     1 2.7636e+13 9.4049e+15 13642
## - SPG:AgressivenessYes         1 3.2569e+13 9.4098e+15 13643
## - MPG:AgressivenessYes         1 3.2866e+13 9.4101e+15 13643
## - I(BPG^2)                     1 3.4654e+13 9.4119e+15 13643
## - BPG:TrustedYes               1 3.8176e+13 9.4154e+15 13643
## - RPG:BPG                      1 3.9598e+13 9.4168e+15 13643
## - RPG:SPG                      1 4.0604e+13 9.4178e+15 13643
## <none>                                      9.3772e+15 13643
## - APG:AgressivenessYes         1 4.4270e+13 9.4215e+15 13643
## - MPG:BPG                      1 4.4416e+13 9.4217e+15 13643
## - RPG:TrustedYes               1 4.4826e+13 9.4221e+15 13643
## - I(APG^2)                     1 4.9884e+13 9.4271e+15 13643
## - MPG:TrustedYes               1 5.3431e+13 9.4307e+15 13644
## - APG:TrustedYes               1 5.3914e+13 9.4312e+15 13644
## - BPG:SPG                      1 5.4901e+13 9.4321e+15 13644
## + RPG:TOPG                     1 2.9549e+12 9.3743e+15 13645
## + I(RPG^2)                     1 2.6680e+12 9.3746e+15 13645
## - BPG:AgressivenessYes         1 8.2840e+13 9.4601e+15 13645
## + RPG:AgressivenessYes         1 1.8519e+12 9.3754e+15 13645
## + TOPG:AgressivenessYes        1 1.5585e+12 9.3757e+15 13645
## + APG:RPG                      1 1.4326e+12 9.3758e+15 13645
## + MPG:RPG                      1 1.0460e+12 9.3762e+15 13645
## + I(MPG^2)                     1 9.6762e+11 9.3763e+15 13645
## + APG:BPG                      1 5.7952e+11 9.3767e+15 13645
## + MPG:PPG                      1 1.5123e+11 9.3771e+15 13645
## + PPG:APG                      1 8.1530e+10 9.3772e+15 13645
## + PPG:TrustedYes               1 3.2442e+10 9.3772e+15 13645
## + APG:TOPG                     1 2.7519e+10 9.3772e+15 13645
## + TOPG:TrustedYes              1 1.5699e+10 9.3772e+15 13645
## - APG:SPG                      1 8.8882e+13 9.4661e+15 13645
## - MPG:SPG                      1 8.8936e+13 9.4662e+15 13645
## - PPG:TOPG                     1 1.0848e+14 9.4857e+15 13646
## - TOPG:BPG                     1 1.1064e+14 9.4879e+15 13646
## - PPG:SPG                      1 1.3076e+14 9.5080e+15 13647
## - PPG:BPG                      1 1.4755e+14 9.5248e+15 13648
## - PPG:AgressivenessYes         1 1.7077e+14 9.5480e+15 13649
## - MPG:APG                      1 2.5064e+14 9.6279e+15 13653
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13641.45
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(PPG^2) + I(APG^2) + I(TOPG^2) + I(BPG^2) + 
##     I(SPG^2) + MPG:APG + MPG:BPG + MPG:SPG + MPG:TrustedYes + 
##     MPG:AgressivenessYes + PPG:RPG + PPG:TOPG + PPG:BPG + PPG:SPG + 
##     PPG:AgressivenessYes + APG:SPG + APG:TrustedYes + APG:AgressivenessYes + 
##     RPG:BPG + RPG:SPG + RPG:TrustedYes + TOPG:BPG + TOPG:SPG + 
##     BPG:SPG + BPG:TrustedYes + BPG:AgressivenessYes + SPG:TrustedYes + 
##     SPG:AgressivenessYes + TrustedYes:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - I(SPG^2)                     1 8.9867e+12 9.3937e+15 13640
## - PPG:RPG                      1 1.1763e+13 9.3965e+15 13640
## - I(PPG^2)                     1 1.2801e+13 9.3975e+15 13640
## - I(TOPG^2)                    1 1.6978e+13 9.4017e+15 13640
## - TOPG:SPG                     1 2.0354e+13 9.4051e+15 13640
## - TrustedYes:AgressivenessYes  1 2.2491e+13 9.4072e+15 13640
## - SPG:AgressivenessYes         1 2.8618e+13 9.4133e+15 13641
## - I(BPG^2)                     1 3.0667e+13 9.4154e+15 13641
## - SPG:TrustedYes               1 3.1205e+13 9.4159e+15 13641
## - RPG:BPG                      1 3.5295e+13 9.4200e+15 13641
## - MPG:BPG                      1 3.8695e+13 9.4234e+15 13641
## <none>                                      9.3847e+15 13642
## - APG:AgressivenessYes         1 4.4334e+13 9.4290e+15 13642
## - RPG:SPG                      1 4.5230e+13 9.4299e+15 13642
## - BPG:TrustedYes               1 4.5307e+13 9.4300e+15 13642
## - MPG:TrustedYes               1 5.0310e+13 9.4350e+15 13642
## - BPG:SPG                      1 5.1866e+13 9.4366e+15 13642
## - RPG:TrustedYes               1 5.1989e+13 9.4367e+15 13642
## - MPG:AgressivenessYes         1 5.3346e+13 9.4381e+15 13642
## - APG:TrustedYes               1 5.5797e+13 9.4405e+15 13642
## - I(APG^2)                     1 5.8970e+13 9.4437e+15 13642
## + MPG:TOPG                     1 7.4697e+12 9.3772e+15 13643
## - BPG:AgressivenessYes         1 7.8166e+13 9.4629e+15 13643
## + TOPG:TrustedYes              1 4.0562e+12 9.3807e+15 13643
## - APG:SPG                      1 8.1741e+13 9.4665e+15 13643
## + RPG:TOPG                     1 3.4888e+12 9.3812e+15 13643
## + RPG:AgressivenessYes         1 2.7213e+12 9.3820e+15 13643
## + I(RPG^2)                     1 2.6813e+12 9.3820e+15 13643
## + APG:BPG                      1 1.5068e+12 9.3832e+15 13643
## + PPG:APG                      1 1.4966e+12 9.3832e+15 13643
## + APG:TOPG                     1 1.1849e+12 9.3835e+15 13643
## + MPG:PPG                      1 1.1712e+12 9.3835e+15 13643
## + MPG:RPG                      1 4.2411e+11 9.3843e+15 13643
## + APG:RPG                      1 3.2617e+11 9.3844e+15 13643
## + TOPG:AgressivenessYes        1 2.4440e+11 9.3845e+15 13643
## + PPG:TrustedYes               1 3.5003e+10 9.3847e+15 13644
## + I(MPG^2)                     1 1.2404e+10 9.3847e+15 13644
## - MPG:SPG                      1 1.0616e+14 9.4909e+15 13644
## - TOPG:BPG                     1 1.1080e+14 9.4955e+15 13645
## - PPG:TOPG                     1 1.3397e+14 9.5187e+15 13646
## - PPG:BPG                      1 1.5455e+14 9.5393e+15 13647
## - PPG:SPG                      1 1.7419e+14 9.5589e+15 13648
## - PPG:AgressivenessYes         1 1.7773e+14 9.5624e+15 13648
## - MPG:APG                      1 2.5526e+14 9.6400e+15 13651
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13639.88
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(PPG^2) + I(APG^2) + I(TOPG^2) + I(BPG^2) + 
##     MPG:APG + MPG:BPG + MPG:SPG + MPG:TrustedYes + MPG:AgressivenessYes + 
##     PPG:RPG + PPG:TOPG + PPG:BPG + PPG:SPG + PPG:AgressivenessYes + 
##     APG:SPG + APG:TrustedYes + APG:AgressivenessYes + RPG:BPG + 
##     RPG:SPG + RPG:TrustedYes + TOPG:BPG + TOPG:SPG + BPG:SPG + 
##     BPG:TrustedYes + BPG:AgressivenessYes + SPG:TrustedYes + 
##     SPG:AgressivenessYes + TrustedYes:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - PPG:RPG                      1 1.0154e+13 9.4039e+15 13638
## - I(PPG^2)                     1 1.3888e+13 9.4076e+15 13638
## - TOPG:SPG                     1 1.7597e+13 9.4113e+15 13639
## - I(TOPG^2)                    1 1.9390e+13 9.4131e+15 13639
## - TrustedYes:AgressivenessYes  1 2.1834e+13 9.4155e+15 13639
## - SPG:AgressivenessYes         1 2.6160e+13 9.4199e+15 13639
## - SPG:TrustedYes               1 2.9286e+13 9.4230e+15 13639
## - I(BPG^2)                     1 2.9800e+13 9.4235e+15 13639
## - RPG:BPG                      1 3.4713e+13 9.4284e+15 13640
## - MPG:BPG                      1 3.8838e+13 9.4325e+15 13640
## - APG:AgressivenessYes         1 4.2060e+13 9.4358e+15 13640
## <none>                                      9.3937e+15 13640
## - MPG:TrustedYes               1 4.4227e+13 9.4379e+15 13640
## - BPG:TrustedYes               1 4.4261e+13 9.4380e+15 13640
## - RPG:SPG                      1 4.9411e+13 9.4431e+15 13640
## - RPG:TrustedYes               1 4.9504e+13 9.4432e+15 13640
## - BPG:SPG                      1 4.9869e+13 9.4436e+15 13640
## - MPG:AgressivenessYes         1 5.4407e+13 9.4481e+15 13640
## - APG:TrustedYes               1 5.4503e+13 9.4482e+15 13640
## - I(APG^2)                     1 5.9699e+13 9.4534e+15 13641
## - APG:SPG                      1 7.2757e+13 9.4665e+15 13641
## + I(SPG^2)                     1 8.9867e+12 9.3847e+15 13642
## - BPG:AgressivenessYes         1 7.7805e+13 9.4715e+15 13642
## + MPG:TOPG                     1 6.8890e+12 9.3868e+15 13642
## + RPG:TOPG                     1 4.4620e+12 9.3892e+15 13642
## + RPG:AgressivenessYes         1 3.1463e+12 9.3906e+15 13642
## + TOPG:TrustedYes              1 2.8438e+12 9.3909e+15 13642
## + I(RPG^2)                     1 2.4070e+12 9.3913e+15 13642
## + PPG:APG                      1 2.2922e+12 9.3914e+15 13642
## + APG:BPG                      1 2.0728e+12 9.3916e+15 13642
## + MPG:PPG                      1 1.6738e+12 9.3920e+15 13642
## + APG:TOPG                     1 8.4807e+11 9.3929e+15 13642
## + MPG:RPG                      1 5.2573e+11 9.3932e+15 13642
## + APG:RPG                      1 4.5841e+11 9.3932e+15 13642
## + I(MPG^2)                     1 1.4959e+11 9.3936e+15 13642
## + TOPG:AgressivenessYes        1 4.3040e+10 9.3937e+15 13642
## + PPG:TrustedYes               1 2.1334e+09 9.3937e+15 13642
## - MPG:SPG                      1 1.0539e+14 9.4991e+15 13643
## - TOPG:BPG                     1 1.0616e+14 9.4999e+15 13643
## - PPG:TOPG                     1 1.3888e+14 9.5326e+15 13644
## - PPG:BPG                      1 1.5303e+14 9.5467e+15 13645
## - PPG:SPG                      1 1.7044e+14 9.5641e+15 13646
## - PPG:AgressivenessYes         1 1.8467e+14 9.5784e+15 13646
## - MPG:APG                      1 2.4695e+14 9.6406e+15 13649
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13638.36
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(PPG^2) + I(APG^2) + I(TOPG^2) + I(BPG^2) + 
##     MPG:APG + MPG:BPG + MPG:SPG + MPG:TrustedYes + MPG:AgressivenessYes + 
##     PPG:TOPG + PPG:BPG + PPG:SPG + PPG:AgressivenessYes + APG:SPG + 
##     APG:TrustedYes + APG:AgressivenessYes + RPG:BPG + RPG:SPG + 
##     RPG:TrustedYes + TOPG:BPG + TOPG:SPG + BPG:SPG + BPG:TrustedYes + 
##     BPG:AgressivenessYes + SPG:TrustedYes + SPG:AgressivenessYes + 
##     TrustedYes:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - I(PPG^2)                     1 1.3584e+13 9.4174e+15 13637
## - TOPG:SPG                     1 1.5225e+13 9.4191e+15 13637
## - TrustedYes:AgressivenessYes  1 1.9003e+13 9.4229e+15 13637
## - I(TOPG^2)                    1 1.9130e+13 9.4230e+15 13637
## - SPG:AgressivenessYes         1 2.5922e+13 9.4298e+15 13638
## - SPG:TrustedYes               1 2.6378e+13 9.4302e+15 13638
## - BPG:TrustedYes               1 3.5508e+13 9.4394e+15 13638
## - I(BPG^2)                     1 3.7136e+13 9.4410e+15 13638
## - RPG:TrustedYes               1 3.9366e+13 9.4432e+15 13638
## - RPG:BPG                      1 4.0331e+13 9.4442e+15 13638
## <none>                                      9.4039e+15 13638
## - MPG:BPG                      1 4.2767e+13 9.4466e+15 13638
## - APG:AgressivenessYes         1 4.3393e+13 9.4472e+15 13638
## - MPG:TrustedYes               1 4.6621e+13 9.4505e+15 13638
## - APG:TrustedYes               1 5.0702e+13 9.4546e+15 13639
## - MPG:AgressivenessYes         1 5.1574e+13 9.4554e+15 13639
## - I(APG^2)                     1 5.6223e+13 9.4601e+15 13639
## - BPG:SPG                      1 5.6781e+13 9.4606e+15 13639
## - APG:SPG                      1 6.6475e+13 9.4703e+15 13640
## - RPG:SPG                      1 6.8541e+13 9.4724e+15 13640
## + PPG:RPG                      1 1.0154e+13 9.3937e+15 13640
## + MPG:TOPG                     1 8.7293e+12 9.3951e+15 13640
## + I(SPG^2)                     1 7.3778e+12 9.3965e+15 13640
## + MPG:RPG                      1 6.4777e+12 9.3974e+15 13640
## + TOPG:TrustedYes              1 4.6333e+12 9.3992e+15 13640
## + I(RPG^2)                     1 4.2090e+12 9.3996e+15 13640
## - BPG:AgressivenessYes         1 8.2144e+13 9.4860e+15 13640
## + APG:BPG                      1 1.8891e+12 9.4020e+15 13640
## + PPG:APG                      1 1.2012e+12 9.4027e+15 13640
## + APG:TOPG                     1 9.6824e+11 9.4029e+15 13640
## + RPG:AgressivenessYes         1 9.5276e+11 9.4029e+15 13640
## + APG:RPG                      1 8.0959e+11 9.4030e+15 13640
## + MPG:PPG                      1 7.3736e+11 9.4031e+15 13640
## + TOPG:AgressivenessYes        1 5.5264e+11 9.4033e+15 13640
## + RPG:TOPG                     1 4.2361e+11 9.4034e+15 13640
## + PPG:TrustedYes               1 7.7355e+10 9.4038e+15 13640
## + I(MPG^2)                     1 2.5718e+10 9.4038e+15 13640
## - TOPG:BPG                     1 1.0204e+14 9.5059e+15 13641
## - MPG:SPG                      1 1.0866e+14 9.5125e+15 13641
## - PPG:TOPG                     1 1.2970e+14 9.5336e+15 13642
## - PPG:BPG                      1 1.5848e+14 9.5623e+15 13644
## - PPG:SPG                      1 1.7050e+14 9.5744e+15 13644
## - PPG:AgressivenessYes         1 1.8071e+14 9.5846e+15 13645
## - MPG:APG                      1 2.3855e+14 9.6424e+15 13647
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13636.99
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(APG^2) + I(TOPG^2) + I(BPG^2) + MPG:APG + 
##     MPG:BPG + MPG:SPG + MPG:TrustedYes + MPG:AgressivenessYes + 
##     PPG:TOPG + PPG:BPG + PPG:SPG + PPG:AgressivenessYes + APG:SPG + 
##     APG:TrustedYes + APG:AgressivenessYes + RPG:BPG + RPG:SPG + 
##     RPG:TrustedYes + TOPG:BPG + TOPG:SPG + BPG:SPG + BPG:TrustedYes + 
##     BPG:AgressivenessYes + SPG:TrustedYes + SPG:AgressivenessYes + 
##     TrustedYes:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - I(TOPG^2)                    1 8.6971e+12 9.4261e+15 13635
## - TOPG:SPG                     1 9.3615e+12 9.4268e+15 13635
## - TrustedYes:AgressivenessYes  1 1.6538e+13 9.4340e+15 13636
## - SPG:AgressivenessYes         1 2.2735e+13 9.4402e+15 13636
## - SPG:TrustedYes               1 2.4066e+13 9.4415e+15 13636
## - BPG:TrustedYes               1 3.4595e+13 9.4520e+15 13637
## - RPG:TrustedYes               1 3.4677e+13 9.4521e+15 13637
## - I(BPG^2)                     1 3.5401e+13 9.4528e+15 13637
## - MPG:BPG                      1 3.5757e+13 9.4532e+15 13637
## - APG:AgressivenessYes         1 3.9189e+13 9.4566e+15 13637
## - RPG:BPG                      1 4.0363e+13 9.4578e+15 13637
## <none>                                      9.4174e+15 13637
## - BPG:SPG                      1 4.8450e+13 9.4659e+15 13637
## - APG:TrustedYes               1 4.9277e+13 9.4667e+15 13637
## - MPG:AgressivenessYes         1 5.4159e+13 9.4716e+15 13638
## - I(APG^2)                     1 5.6316e+13 9.4738e+15 13638
## - APG:SPG                      1 5.7806e+13 9.4752e+15 13638
## - MPG:TrustedYes               1 6.4012e+13 9.4815e+15 13638
## - RPG:SPG                      1 6.4351e+13 9.4818e+15 13638
## + I(PPG^2)                     1 1.3584e+13 9.4039e+15 13638
## + PPG:RPG                      1 9.8506e+12 9.4076e+15 13638
## + MPG:TOPG                     1 8.9714e+12 9.4085e+15 13639
## - BPG:AgressivenessYes         1 7.7034e+13 9.4945e+15 13639
## + I(SPG^2)                     1 8.3750e+12 9.4091e+15 13639
## + MPG:RPG                      1 6.1670e+12 9.4113e+15 13639
## + TOPG:TrustedYes              1 5.7008e+12 9.4117e+15 13639
## + MPG:PPG                      1 4.4749e+12 9.4130e+15 13639
## + I(RPG^2)                     1 2.8331e+12 9.4146e+15 13639
## + APG:BPG                      1 2.2905e+12 9.4151e+15 13639
## + APG:TOPG                     1 2.0427e+12 9.4154e+15 13639
## + PPG:TrustedYes               1 1.8596e+12 9.4156e+15 13639
## + RPG:AgressivenessYes         1 1.5035e+12 9.4159e+15 13639
## + APG:RPG                      1 9.7131e+11 9.4165e+15 13639
## + PPG:APG                      1 7.3870e+11 9.4167e+15 13639
## + TOPG:AgressivenessYes        1 6.5417e+11 9.4168e+15 13639
## + I(MPG^2)                     1 6.5016e+11 9.4168e+15 13639
## + RPG:TOPG                     1 2.3035e+11 9.4172e+15 13639
## - TOPG:BPG                     1 9.1419e+13 9.5089e+15 13639
## - MPG:SPG                      1 1.0795e+14 9.5254e+15 13640
## - PPG:BPG                      1 1.4584e+14 9.5633e+15 13642
## - PPG:TOPG                     1 1.4671e+14 9.5641e+15 13642
## - PPG:AgressivenessYes         1 1.8491e+14 9.6024e+15 13644
## - PPG:SPG                      1 1.8553e+14 9.6030e+15 13644
## - MPG:APG                      1 2.2637e+14 9.6438e+15 13646
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13635.4
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(APG^2) + I(BPG^2) + MPG:APG + MPG:BPG + 
##     MPG:SPG + MPG:TrustedYes + MPG:AgressivenessYes + PPG:TOPG + 
##     PPG:BPG + PPG:SPG + PPG:AgressivenessYes + APG:SPG + APG:TrustedYes + 
##     APG:AgressivenessYes + RPG:BPG + RPG:SPG + RPG:TrustedYes + 
##     TOPG:BPG + TOPG:SPG + BPG:SPG + BPG:TrustedYes + BPG:AgressivenessYes + 
##     SPG:TrustedYes + SPG:AgressivenessYes + TrustedYes:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - TOPG:SPG                     1 1.5012e+13 9.4411e+15 13634
## - TrustedYes:AgressivenessYes  1 1.8077e+13 9.4442e+15 13634
## - SPG:TrustedYes               1 2.3028e+13 9.4492e+15 13634
## - SPG:AgressivenessYes         1 2.6291e+13 9.4524e+15 13635
## - I(BPG^2)                     1 3.0514e+13 9.4567e+15 13635
## - MPG:BPG                      1 3.1698e+13 9.4578e+15 13635
## - RPG:TrustedYes               1 3.3352e+13 9.4595e+15 13635
## - RPG:BPG                      1 3.5502e+13 9.4616e+15 13635
## - BPG:TrustedYes               1 3.6919e+13 9.4631e+15 13635
## - APG:AgressivenessYes         1 3.7283e+13 9.4634e+15 13635
## <none>                                      9.4261e+15 13635
## - BPG:SPG                      1 4.6076e+13 9.4722e+15 13636
## - APG:TrustedYes               1 4.7847e+13 9.4740e+15 13636
## - MPG:AgressivenessYes         1 5.0666e+13 9.4768e+15 13636
## - RPG:SPG                      1 6.3013e+13 9.4891e+15 13636
## - MPG:TrustedYes               1 6.4020e+13 9.4902e+15 13636
## - APG:SPG                      1 6.7654e+13 9.4938e+15 13637
## - BPG:AgressivenessYes         1 7.4084e+13 9.5002e+15 13637
## + APG:TOPG                     1 1.0125e+13 9.4160e+15 13637
## + PPG:RPG                      1 9.7857e+12 9.4164e+15 13637
## + I(SPG^2)                     1 9.6484e+12 9.4165e+15 13637
## + I(TOPG^2)                    1 8.6971e+12 9.4174e+15 13637
## + MPG:TOPG                     1 7.5906e+12 9.4185e+15 13637
## + MPG:RPG                      1 6.6445e+12 9.4195e+15 13637
## + APG:BPG                      1 4.5401e+12 9.4216e+15 13637
## + I(PPG^2)                     1 3.1517e+12 9.4230e+15 13637
## + APG:RPG                      1 2.9478e+12 9.4232e+15 13637
## + I(RPG^2)                     1 2.2983e+12 9.4238e+15 13637
## + TOPG:TrustedYes              1 2.0447e+12 9.4241e+15 13637
## + RPG:AgressivenessYes         1 1.3890e+12 9.4247e+15 13637
## + PPG:TrustedYes               1 1.2379e+12 9.4249e+15 13637
## + MPG:PPG                      1 1.0469e+12 9.4251e+15 13637
## + RPG:TOPG                     1 9.9156e+11 9.4251e+15 13637
## + TOPG:AgressivenessYes        1 5.0245e+11 9.4256e+15 13637
## + PPG:APG                      1 2.9068e+11 9.4258e+15 13637
## + I(MPG^2)                     1 2.3176e+11 9.4259e+15 13637
## - I(APG^2)                     1 9.2197e+13 9.5183e+15 13638
## - TOPG:BPG                     1 9.4239e+13 9.5204e+15 13638
## - MPG:SPG                      1 1.0094e+14 9.5271e+15 13638
## - PPG:BPG                      1 1.4670e+14 9.5728e+15 13640
## - PPG:SPG                      1 1.7721e+14 9.6034e+15 13642
## - PPG:AgressivenessYes         1 1.8557e+14 9.6117e+15 13642
## - MPG:APG                      1 2.1799e+14 9.6441e+15 13644
## - PPG:TOPG                     1 2.6228e+14 9.6884e+15 13646
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13634.1
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(APG^2) + I(BPG^2) + MPG:APG + MPG:BPG + 
##     MPG:SPG + MPG:TrustedYes + MPG:AgressivenessYes + PPG:TOPG + 
##     PPG:BPG + PPG:SPG + PPG:AgressivenessYes + APG:SPG + APG:TrustedYes + 
##     APG:AgressivenessYes + RPG:BPG + RPG:SPG + RPG:TrustedYes + 
##     TOPG:BPG + BPG:SPG + BPG:TrustedYes + BPG:AgressivenessYes + 
##     SPG:TrustedYes + SPG:AgressivenessYes + TrustedYes:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - SPG:AgressivenessYes         1 1.4402e+13 9.4555e+15 13633
## - TrustedYes:AgressivenessYes  1 1.8134e+13 9.4593e+15 13633
## - SPG:TrustedYes               1 2.3015e+13 9.4642e+15 13633
## - RPG:TrustedYes               1 3.2760e+13 9.4739e+15 13634
## - MPG:BPG                      1 3.3229e+13 9.4744e+15 13634
## - BPG:TrustedYes               1 3.4140e+13 9.4753e+15 13634
## - I(BPG^2)                     1 3.4493e+13 9.4756e+15 13634
## - RPG:BPG                      1 3.6872e+13 9.4780e+15 13634
## - APG:AgressivenessYes         1 3.9295e+13 9.4804e+15 13634
## - BPG:SPG                      1 3.9715e+13 9.4809e+15 13634
## <none>                                      9.4411e+15 13634
## - MPG:AgressivenessYes         1 4.5109e+13 9.4863e+15 13634
## - APG:TrustedYes               1 4.8019e+13 9.4892e+15 13634
## - APG:SPG                      1 5.2745e+13 9.4939e+15 13635
## - MPG:TrustedYes               1 6.0150e+13 9.5013e+15 13635
## - RPG:SPG                      1 6.3186e+13 9.5043e+15 13635
## + APG:TOPG                     1 1.6858e+13 9.4243e+15 13635
## + TOPG:SPG                     1 1.5012e+13 9.4261e+15 13635
## + I(TOPG^2)                    1 1.4347e+13 9.4268e+15 13635
## - BPG:AgressivenessYes         1 7.3441e+13 9.5146e+15 13636
## + PPG:RPG                      1 7.3922e+12 9.4338e+15 13636
## + APG:BPG                      1 7.3841e+12 9.4338e+15 13636
## + I(SPG^2)                     1 7.1170e+12 9.4340e+15 13636
## + MPG:RPG                      1 4.7193e+12 9.4364e+15 13636
## + TOPG:AgressivenessYes        1 2.8318e+12 9.4383e+15 13636
## + I(RPG^2)                     1 2.4937e+12 9.4387e+15 13636
## + APG:RPG                      1 1.5702e+12 9.4396e+15 13636
## + RPG:AgressivenessYes         1 1.1306e+12 9.4400e+15 13636
## + RPG:TOPG                     1 7.7978e+11 9.4404e+15 13636
## + PPG:TrustedYes               1 7.0591e+11 9.4404e+15 13636
## + MPG:TOPG                     1 2.5689e+11 9.4409e+15 13636
## + PPG:APG                      1 2.2651e+11 9.4409e+15 13636
## + I(MPG^2)                     1 2.0873e+11 9.4409e+15 13636
## + I(PPG^2)                     1 1.3335e+11 9.4410e+15 13636
## + MPG:PPG                      1 6.8860e+10 9.4411e+15 13636
## + TOPG:TrustedYes              1 4.5390e+10 9.4411e+15 13636
## - TOPG:BPG                     1 9.4280e+13 9.5354e+15 13636
## - MPG:SPG                      1 9.6649e+13 9.5378e+15 13637
## - I(APG^2)                     1 9.7437e+13 9.5386e+15 13637
## - PPG:BPG                      1 1.5195e+14 9.5931e+15 13639
## - PPG:AgressivenessYes         1 1.7062e+14 9.6118e+15 13640
## - PPG:SPG                      1 2.0365e+14 9.6448e+15 13642
## - MPG:APG                      1 2.0611e+14 9.6473e+15 13642
## - PPG:TOPG                     1 2.9848e+14 9.7396e+15 13646
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13632.78
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(APG^2) + I(BPG^2) + MPG:APG + MPG:BPG + 
##     MPG:SPG + MPG:TrustedYes + MPG:AgressivenessYes + PPG:TOPG + 
##     PPG:BPG + PPG:SPG + PPG:AgressivenessYes + APG:SPG + APG:TrustedYes + 
##     APG:AgressivenessYes + RPG:BPG + RPG:SPG + RPG:TrustedYes + 
##     TOPG:BPG + BPG:SPG + BPG:TrustedYes + BPG:AgressivenessYes + 
##     SPG:TrustedYes + TrustedYes:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - SPG:TrustedYes               1 1.6046e+13 9.4716e+15 13632
## - TrustedYes:AgressivenessYes  1 1.9932e+13 9.4755e+15 13632
## - RPG:TrustedYes               1 2.9881e+13 9.4854e+15 13632
## - BPG:TrustedYes               1 3.2438e+13 9.4880e+15 13632
## - I(BPG^2)                     1 3.3961e+13 9.4895e+15 13632
## - MPG:BPG                      1 3.5868e+13 9.4914e+15 13632
## - RPG:BPG                      1 3.6535e+13 9.4921e+15 13632
## - BPG:SPG                      1 3.9482e+13 9.4950e+15 13633
## - APG:TrustedYes               1 4.2013e+13 9.4976e+15 13633
## <none>                                      9.4555e+15 13633
## - RPG:SPG                      1 5.5233e+13 9.5108e+15 13633
## - APG:AgressivenessYes         1 5.7219e+13 9.5128e+15 13633
## - MPG:TrustedYes               1 6.8356e+13 9.5239e+15 13634
## + APG:TOPG                     1 1.7180e+13 9.4384e+15 13634
## + I(TOPG^2)                    1 1.4408e+13 9.4411e+15 13634
## + SPG:AgressivenessYes         1 1.4402e+13 9.4411e+15 13634
## - BPG:AgressivenessYes         1 7.3733e+13 9.5293e+15 13634
## + APG:BPG                      1 8.7318e+12 9.4468e+15 13634
## + PPG:RPG                      1 8.2999e+12 9.4472e+15 13634
## + I(SPG^2)                     1 6.4103e+12 9.4491e+15 13634
## + MPG:RPG                      1 6.3194e+12 9.4492e+15 13634
## - MPG:AgressivenessYes         1 8.2039e+13 9.5376e+15 13635
## + TOPG:SPG                     1 3.1225e+12 9.4524e+15 13635
## + I(RPG^2)                     1 2.7494e+12 9.4528e+15 13635
## + APG:RPG                      1 2.6404e+12 9.4529e+15 13635
## + TOPG:AgressivenessYes        1 2.3385e+12 9.4532e+15 13635
## + RPG:AgressivenessYes         1 1.3166e+12 9.4542e+15 13635
## + RPG:TOPG                     1 9.6928e+11 9.4546e+15 13635
## + I(MPG^2)                     1 7.0147e+11 9.4548e+15 13635
## + MPG:TOPG                     1 6.8054e+11 9.4549e+15 13635
## + PPG:TrustedYes               1 4.0062e+11 9.4551e+15 13635
## + PPG:APG                      1 2.3185e+11 9.4553e+15 13635
## + I(PPG^2)                     1 2.0990e+11 9.4553e+15 13635
## + TOPG:TrustedYes              1 2.0699e+11 9.4553e+15 13635
## + MPG:PPG                      1 2.0371e+11 9.4553e+15 13635
## - MPG:SPG                      1 8.9027e+13 9.5446e+15 13635
## - TOPG:BPG                     1 9.4830e+13 9.5504e+15 13635
## - APG:SPG                      1 9.8870e+13 9.5544e+15 13635
## - I(APG^2)                     1 1.2518e+14 9.5807e+15 13637
## - PPG:BPG                      1 1.5397e+14 9.6095e+15 13638
## - PPG:SPG                      1 1.8981e+14 9.6454e+15 13640
## - PPG:AgressivenessYes         1 2.0890e+14 9.6644e+15 13640
## - MPG:APG                      1 2.1935e+14 9.6749e+15 13641
## - PPG:TOPG                     1 3.0342e+14 9.7590e+15 13645
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13631.53
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(APG^2) + I(BPG^2) + MPG:APG + MPG:BPG + 
##     MPG:SPG + MPG:TrustedYes + MPG:AgressivenessYes + PPG:TOPG + 
##     PPG:BPG + PPG:SPG + PPG:AgressivenessYes + APG:SPG + APG:TrustedYes + 
##     APG:AgressivenessYes + RPG:BPG + RPG:SPG + RPG:TrustedYes + 
##     TOPG:BPG + BPG:SPG + BPG:TrustedYes + BPG:AgressivenessYes + 
##     TrustedYes:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - TrustedYes:AgressivenessYes  1 1.9177e+13 9.4908e+15 13630
## - MPG:BPG                      1 2.9605e+13 9.5012e+15 13631
## - APG:TrustedYes               1 3.0399e+13 9.5020e+15 13631
## - RPG:TrustedYes               1 3.3813e+13 9.5054e+15 13631
## - I(BPG^2)                     1 3.4829e+13 9.5064e+15 13631
## - RPG:BPG                      1 3.5759e+13 9.5074e+15 13631
## <none>                                      9.4716e+15 13632
## - BPG:SPG                      1 4.4801e+13 9.5164e+15 13632
## - BPG:TrustedYes               1 4.6437e+13 9.5180e+15 13632
## - APG:AgressivenessYes         1 6.0279e+13 9.5319e+15 13632
## - RPG:SPG                      1 6.3998e+13 9.5356e+15 13632
## - MPG:TrustedYes               1 6.4673e+13 9.5363e+15 13632
## + APG:TOPG                     1 1.9547e+13 9.4520e+15 13633
## + SPG:TrustedYes               1 1.6046e+13 9.4555e+15 13633
## + I(TOPG^2)                    1 1.3255e+13 9.4583e+15 13633
## - BPG:AgressivenessYes         1 7.3173e+13 9.5448e+15 13633
## + APG:BPG                      1 1.1107e+13 9.4605e+15 13633
## + SPG:AgressivenessYes         1 7.4323e+12 9.4642e+15 13633
## - MPG:AgressivenessYes         1 7.9053e+13 9.5506e+15 13633
## - MPG:SPG                      1 7.9087e+13 9.5507e+15 13633
## + PPG:RPG                      1 5.9630e+12 9.4656e+15 13633
## + I(SPG^2)                     1 5.3769e+12 9.4662e+15 13633
## + TOPG:SPG                     1 4.8149e+12 9.4668e+15 13633
## + MPG:RPG                      1 2.9857e+12 9.4686e+15 13633
## + I(RPG^2)                     1 2.5954e+12 9.4690e+15 13633
## + TOPG:AgressivenessYes        1 2.3946e+12 9.4692e+15 13633
## + APG:RPG                      1 2.2360e+12 9.4694e+15 13633
## + MPG:TOPG                     1 1.5167e+12 9.4701e+15 13634
## + RPG:AgressivenessYes         1 1.3951e+12 9.4702e+15 13634
## + RPG:TOPG                     1 5.1049e+11 9.4711e+15 13634
## + I(MPG^2)                     1 5.0903e+11 9.4711e+15 13634
## + PPG:TrustedYes               1 3.9874e+11 9.4712e+15 13634
## + TOPG:TrustedYes              1 1.9127e+11 9.4714e+15 13634
## + I(PPG^2)                     1 8.0207e+10 9.4715e+15 13634
## + MPG:PPG                      1 4.0493e+10 9.4716e+15 13634
## + PPG:APG                      1 3.3653e+10 9.4716e+15 13634
## - APG:SPG                      1 8.9265e+13 9.5609e+15 13634
## - TOPG:BPG                     1 8.9852e+13 9.5614e+15 13634
## - I(APG^2)                     1 1.1967e+14 9.5913e+15 13635
## - PPG:BPG                      1 1.4804e+14 9.6196e+15 13636
## - PPG:SPG                      1 1.7773e+14 9.6493e+15 13638
## - MPG:APG                      1 2.0338e+14 9.6750e+15 13639
## - PPG:AgressivenessYes         1 2.0830e+14 9.6799e+15 13639
## - PPG:TOPG                     1 2.9161e+14 9.7632e+15 13643
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13630.42
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(APG^2) + I(BPG^2) + MPG:APG + MPG:BPG + 
##     MPG:SPG + MPG:TrustedYes + MPG:AgressivenessYes + PPG:TOPG + 
##     PPG:BPG + PPG:SPG + PPG:AgressivenessYes + APG:SPG + APG:TrustedYes + 
##     APG:AgressivenessYes + RPG:BPG + RPG:SPG + RPG:TrustedYes + 
##     TOPG:BPG + BPG:SPG + BPG:TrustedYes + BPG:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - APG:TrustedYes               1 1.4432e+13 9.5052e+15 13629
## - MPG:BPG                      1 2.3509e+13 9.5143e+15 13630
## - RPG:TrustedYes               1 2.5607e+13 9.5164e+15 13630
## - I(BPG^2)                     1 3.0619e+13 9.5214e+15 13630
## - RPG:BPG                      1 3.2248e+13 9.5230e+15 13630
## - BPG:SPG                      1 4.0005e+13 9.5308e+15 13630
## <none>                                      9.4908e+15 13630
## - MPG:TrustedYes               1 4.9139e+13 9.5399e+15 13631
## - RPG:SPG                      1 5.6879e+13 9.5477e+15 13631
## - BPG:TrustedYes               1 5.7983e+13 9.5488e+15 13631
## + APG:TOPG                     1 2.4266e+13 9.4665e+15 13631
## - MPG:AgressivenessYes         1 6.4833e+13 9.5556e+15 13631
## + TrustedYes:AgressivenessYes  1 1.9177e+13 9.4716e+15 13632
## + SPG:TrustedYes               1 1.5292e+13 9.4755e+15 13632
## + I(TOPG^2)                    1 1.5178e+13 9.4756e+15 13632
## + APG:BPG                      1 1.5009e+13 9.4758e+15 13632
## - APG:AgressivenessYes         1 7.1690e+13 9.5625e+15 13632
## - MPG:SPG                      1 7.4333e+13 9.5651e+15 13632
## + SPG:AgressivenessYes         1 8.8120e+12 9.4820e+15 13632
## + I(SPG^2)                     1 5.0718e+12 9.4857e+15 13632
## - BPG:AgressivenessYes         1 8.1817e+13 9.5726e+15 13632
## + TOPG:SPG                     1 4.3569e+12 9.4864e+15 13632
## + PPG:RPG                      1 3.9603e+12 9.4868e+15 13632
## + MPG:TOPG                     1 2.7634e+12 9.4880e+15 13632
## + TOPG:AgressivenessYes        1 2.5217e+12 9.4883e+15 13632
## + APG:RPG                      1 2.1348e+12 9.4886e+15 13632
## + RPG:AgressivenessYes         1 2.0987e+12 9.4887e+15 13632
## + I(RPG^2)                     1 2.0583e+12 9.4887e+15 13632
## + PPG:TrustedYes               1 1.9276e+12 9.4888e+15 13632
## + I(MPG^2)                     1 1.5681e+12 9.4892e+15 13632
## + TOPG:TrustedYes              1 1.3145e+12 9.4895e+15 13632
## + MPG:RPG                      1 7.9818e+11 9.4900e+15 13632
## + PPG:APG                      1 6.9926e+11 9.4901e+15 13632
## + MPG:PPG                      1 6.4178e+11 9.4901e+15 13632
## + RPG:TOPG                     1 1.9058e+11 9.4906e+15 13632
## + I(PPG^2)                     1 1.7251e+10 9.4908e+15 13632
## - TOPG:BPG                     1 8.8664e+13 9.5794e+15 13632
## - APG:SPG                      1 9.5817e+13 9.5866e+15 13633
## - I(APG^2)                     1 1.3008e+14 9.6209e+15 13634
## - PPG:BPG                      1 1.4535e+14 9.6361e+15 13635
## - PPG:SPG                      1 1.7703e+14 9.6678e+15 13637
## - MPG:APG                      1 1.8438e+14 9.6752e+15 13637
## - PPG:AgressivenessYes         1 2.0100e+14 9.6918e+15 13638
## - PPG:TOPG                     1 2.8905e+14 9.7798e+15 13642
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13629.09
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(APG^2) + I(BPG^2) + MPG:APG + MPG:BPG + 
##     MPG:SPG + MPG:TrustedYes + MPG:AgressivenessYes + PPG:TOPG + 
##     PPG:BPG + PPG:SPG + PPG:AgressivenessYes + APG:SPG + APG:AgressivenessYes + 
##     RPG:BPG + RPG:SPG + RPG:TrustedYes + TOPG:BPG + BPG:SPG + 
##     BPG:TrustedYes + BPG:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - RPG:TrustedYes               1 2.0596e+13 9.5258e+15 13628
## - MPG:BPG                      1 2.2941e+13 9.5281e+15 13628
## - I(BPG^2)                     1 3.0927e+13 9.5361e+15 13628
## - RPG:BPG                      1 3.2124e+13 9.5373e+15 13629
## - BPG:SPG                      1 3.7257e+13 9.5425e+15 13629
## <none>                                      9.5052e+15 13629
## - RPG:SPG                      1 5.3024e+13 9.5582e+15 13630
## - MPG:TrustedYes               1 5.4952e+13 9.5602e+15 13630
## + APG:TOPG                     1 2.6871e+13 9.4783e+15 13630
## + APG:BPG                      1 1.7806e+13 9.4874e+15 13630
## - BPG:TrustedYes               1 6.8977e+13 9.5742e+15 13630
## + APG:TrustedYes               1 1.4432e+13 9.4908e+15 13630
## + I(TOPG^2)                    1 1.3270e+13 9.4919e+15 13630
## - MPG:AgressivenessYes         1 7.3350e+13 9.5786e+15 13630
## - MPG:SPG                      1 7.5699e+13 9.5809e+15 13631
## + SPG:AgressivenessYes         1 6.5674e+12 9.4986e+15 13631
## + SPG:TrustedYes               1 5.5935e+12 9.4996e+15 13631
## + TOPG:SPG                     1 5.1739e+12 9.5000e+15 13631
## + I(SPG^2)                     1 5.1047e+12 9.5001e+15 13631
## + PPG:RPG                      1 3.6801e+12 9.5015e+15 13631
## + TrustedYes:AgressivenessYes  1 3.2111e+12 9.5020e+15 13631
## + RPG:AgressivenessYes         1 2.5533e+12 9.5027e+15 13631
## + PPG:APG                      1 2.0066e+12 9.5032e+15 13631
## + MPG:TOPG                     1 1.8904e+12 9.5033e+15 13631
## + APG:RPG                      1 1.7628e+12 9.5034e+15 13631
## + I(RPG^2)                     1 1.7020e+12 9.5035e+15 13631
## + TOPG:AgressivenessYes        1 1.4031e+12 9.5038e+15 13631
## + PPG:TrustedYes               1 1.2741e+12 9.5039e+15 13631
## + MPG:RPG                      1 1.0870e+12 9.5041e+15 13631
## + TOPG:TrustedYes              1 1.0840e+12 9.5041e+15 13631
## + I(MPG^2)                     1 1.0038e+11 9.5051e+15 13631
## + RPG:TOPG                     1 3.0586e+10 9.5052e+15 13631
## + I(PPG^2)                     1 9.3618e+09 9.5052e+15 13631
## + MPG:PPG                      1 9.0375e+09 9.5052e+15 13631
## - TOPG:BPG                     1 8.9234e+13 9.5944e+15 13631
## - APG:SPG                      1 9.1849e+13 9.5971e+15 13631
## - BPG:AgressivenessYes         1 9.6423e+13 9.6016e+15 13632
## - APG:AgressivenessYes         1 1.3083e+14 9.6360e+15 13633
## - I(APG^2)                     1 1.3155e+14 9.6368e+15 13633
## - PPG:BPG                      1 1.4868e+14 9.6539e+15 13634
## - MPG:APG                      1 1.7187e+14 9.6771e+15 13635
## - PPG:SPG                      1 1.8236e+14 9.6876e+15 13636
## - PPG:AgressivenessYes         1 1.9657e+14 9.7018e+15 13636
## - PPG:TOPG                     1 2.7771e+14 9.7829e+15 13640
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13628.05
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(APG^2) + I(BPG^2) + MPG:APG + MPG:BPG + 
##     MPG:SPG + MPG:TrustedYes + MPG:AgressivenessYes + PPG:TOPG + 
##     PPG:BPG + PPG:SPG + PPG:AgressivenessYes + APG:SPG + APG:AgressivenessYes + 
##     RPG:BPG + RPG:SPG + TOPG:BPG + BPG:SPG + BPG:TrustedYes + 
##     BPG:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - RPG:BPG                      1 2.4080e+13 9.5499e+15 13627
## - MPG:BPG                      1 2.5603e+13 9.5514e+15 13627
## - I(BPG^2)                     1 2.6794e+13 9.5526e+15 13627
## - BPG:SPG                      1 2.8418e+13 9.5542e+15 13627
## - RPG:SPG                      1 3.5206e+13 9.5610e+15 13628
## - MPG:TrustedYes               1 4.0444e+13 9.5662e+15 13628
## <none>                                      9.5258e+15 13628
## - BPG:TrustedYes               1 4.8696e+13 9.5745e+15 13628
## + APG:TOPG                     1 2.4951e+13 9.5009e+15 13629
## - MPG:SPG                      1 6.2779e+13 9.5886e+15 13629
## + RPG:TrustedYes               1 2.0596e+13 9.5052e+15 13629
## + RPG:AgressivenessYes         1 1.5498e+13 9.5103e+15 13629
## + APG:BPG                      1 1.3015e+13 9.5128e+15 13629
## - MPG:AgressivenessYes         1 7.4532e+13 9.6003e+15 13630
## + I(TOPG^2)                    1 1.1670e+13 9.5141e+15 13630
## + APG:TrustedYes               1 9.4218e+12 9.5164e+15 13630
## + SPG:TrustedYes               1 8.7424e+12 9.5171e+15 13630
## + MPG:RPG                      1 7.2499e+12 9.5186e+15 13630
## + TOPG:SPG                     1 5.7435e+12 9.5201e+15 13630
## + SPG:AgressivenessYes         1 4.6596e+12 9.5211e+15 13630
## + I(SPG^2)                     1 4.3883e+12 9.5214e+15 13630
## + MPG:TOPG                     1 3.5320e+12 9.5223e+15 13630
## + TOPG:TrustedYes              1 2.5560e+12 9.5232e+15 13630
## + TrustedYes:AgressivenessYes  1 1.8627e+12 9.5239e+15 13630
## + PPG:APG                      1 1.8435e+12 9.5240e+15 13630
## + RPG:TOPG                     1 1.7163e+12 9.5241e+15 13630
## + I(RPG^2)                     1 8.1937e+11 9.5250e+15 13630
## + MPG:PPG                      1 3.5216e+11 9.5254e+15 13630
## + I(MPG^2)                     1 3.1239e+11 9.5255e+15 13630
## + TOPG:AgressivenessYes        1 2.7606e+11 9.5255e+15 13630
## + APG:RPG                      1 1.7304e+11 9.5256e+15 13630
## + PPG:RPG                      1 6.3383e+10 9.5257e+15 13630
## + I(PPG^2)                     1 4.9227e+10 9.5258e+15 13630
## + PPG:TrustedYes               1 3.4592e+10 9.5258e+15 13630
## - BPG:AgressivenessYes         1 8.9921e+13 9.6157e+15 13630
## - TOPG:BPG                     1 9.1722e+13 9.6175e+15 13630
## - APG:SPG                      1 1.0066e+14 9.6265e+15 13631
## - APG:AgressivenessYes         1 1.1728e+14 9.6431e+15 13632
## - I(APG^2)                     1 1.3300e+14 9.6588e+15 13632
## - PPG:BPG                      1 1.4617e+14 9.6720e+15 13633
## - MPG:APG                      1 1.7249e+14 9.6983e+15 13634
## - PPG:SPG                      1 1.8130e+14 9.7071e+15 13634
## - PPG:AgressivenessYes         1 1.9227e+14 9.7181e+15 13635
## - PPG:TOPG                     1 2.8196e+14 9.8078e+15 13639
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13627.17
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(APG^2) + I(BPG^2) + MPG:APG + MPG:BPG + 
##     MPG:SPG + MPG:TrustedYes + MPG:AgressivenessYes + PPG:TOPG + 
##     PPG:BPG + PPG:SPG + PPG:AgressivenessYes + APG:SPG + APG:AgressivenessYes + 
##     RPG:SPG + TOPG:BPG + BPG:SPG + BPG:TrustedYes + BPG:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - I(BPG^2)                     1 8.4322e+12 9.5583e+15 13626
## - BPG:SPG                      1 3.7370e+13 9.5873e+15 13627
## - RPG:SPG                      1 4.3118e+13 9.5930e+15 13627
## - BPG:TrustedYes               1 4.3296e+13 9.5932e+15 13627
## <none>                                      9.5499e+15 13627
## - MPG:TrustedYes               1 4.4260e+13 9.5941e+15 13627
## - MPG:BPG                      1 5.1604e+13 9.6015e+15 13628
## + RPG:BPG                      1 2.4080e+13 9.5258e+15 13628
## + APG:TOPG                     1 1.7511e+13 9.5324e+15 13628
## - MPG:AgressivenessYes         1 6.9521e+13 9.6194e+15 13628
## + RPG:TrustedYes               1 1.2552e+13 9.5373e+15 13629
## + I(RPG^2)                     1 1.0216e+13 9.5397e+15 13629
## + APG:TrustedYes               1 1.0208e+13 9.5397e+15 13629
## + RPG:AgressivenessYes         1 8.8331e+12 9.5410e+15 13629
## - MPG:SPG                      1 7.8034e+13 9.6279e+15 13629
## + SPG:TrustedYes               1 7.6445e+12 9.5422e+15 13629
## + I(TOPG^2)                    1 7.1081e+12 9.5428e+15 13629
## + TOPG:SPG                     1 6.3194e+12 9.5436e+15 13629
## + SPG:AgressivenessYes         1 4.8610e+12 9.5450e+15 13629
## + APG:BPG                      1 4.7501e+12 9.5451e+15 13629
## + I(SPG^2)                     1 3.7010e+12 9.5462e+15 13629
## + TOPG:TrustedYes              1 2.8915e+12 9.5470e+15 13629
## + APG:RPG                      1 1.8279e+12 9.5481e+15 13629
## + TrustedYes:AgressivenessYes  1 1.3202e+12 9.5486e+15 13629
## + MPG:TOPG                     1 1.1767e+12 9.5487e+15 13629
## + MPG:RPG                      1 8.7588e+11 9.5490e+15 13629
## + PPG:APG                      1 7.5660e+11 9.5491e+15 13629
## + PPG:RPG                      1 5.5608e+11 9.5493e+15 13629
## + TOPG:AgressivenessYes        1 3.8793e+11 9.5495e+15 13629
## + RPG:TOPG                     1 3.8586e+11 9.5495e+15 13629
## + I(MPG^2)                     1 8.8105e+10 9.5498e+15 13629
## + I(PPG^2)                     1 4.1152e+10 9.5498e+15 13629
## + MPG:PPG                      1 1.2955e+10 9.5499e+15 13629
## + PPG:TrustedYes               1 1.2069e+10 9.5499e+15 13629
## - BPG:AgressivenessYes         1 8.6883e+13 9.6368e+15 13629
## - TOPG:BPG                     1 9.9227e+13 9.6491e+15 13630
## - APG:SPG                      1 1.0627e+14 9.6562e+15 13630
## - APG:AgressivenessYes         1 1.1781e+14 9.6677e+15 13631
## - I(APG^2)                     1 1.3481e+14 9.6847e+15 13631
## - PPG:BPG                      1 1.6259e+14 9.7125e+15 13633
## - MPG:APG                      1 1.7019e+14 9.7201e+15 13633
## - PPG:AgressivenessYes         1 1.8644e+14 9.7363e+15 13634
## - PPG:SPG                      1 2.0727e+14 9.7571e+15 13635
## - PPG:TOPG                     1 2.9668e+14 9.8466e+15 13639
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13625.56
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(APG^2) + MPG:APG + MPG:BPG + MPG:SPG + 
##     MPG:TrustedYes + MPG:AgressivenessYes + PPG:TOPG + PPG:BPG + 
##     PPG:SPG + PPG:AgressivenessYes + APG:SPG + APG:AgressivenessYes + 
##     RPG:SPG + TOPG:BPG + BPG:SPG + BPG:TrustedYes + BPG:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - BPG:SPG                      1 3.0129e+13 9.5884e+15 13625
## - RPG:SPG                      1 4.2226e+13 9.6005e+15 13626
## - MPG:BPG                      1 4.3179e+13 9.6015e+15 13626
## <none>                                      9.5583e+15 13626
## - MPG:TrustedYes               1 4.5682e+13 9.6040e+15 13626
## - BPG:TrustedYes               1 5.6003e+13 9.6143e+15 13626
## + APG:TOPG                     1 1.9637e+13 9.5387e+15 13627
## - MPG:AgressivenessYes         1 7.1085e+13 9.6294e+15 13627
## + RPG:TrustedYes               1 1.2994e+13 9.5453e+15 13627
## + APG:BPG                      1 1.0543e+13 9.5478e+15 13627
## + APG:TrustedYes               1 1.0346e+13 9.5480e+15 13627
## + RPG:AgressivenessYes         1 8.7250e+12 9.5496e+15 13627
## + I(BPG^2)                     1 8.4322e+12 9.5499e+15 13627
## + SPG:TrustedYes               1 8.1565e+12 9.5502e+15 13627
## + TOPG:SPG                     1 7.5648e+12 9.5507e+15 13627
## + I(RPG^2)                     1 7.5008e+12 9.5508e+15 13627
## + I(TOPG^2)                    1 5.8335e+12 9.5525e+15 13627
## + RPG:BPG                      1 5.7185e+12 9.5526e+15 13627
## + SPG:AgressivenessYes         1 4.5618e+12 9.5538e+15 13627
## + TOPG:TrustedYes              1 4.0192e+12 9.5543e+15 13627
## - MPG:SPG                      1 8.3329e+13 9.6416e+15 13627
## + I(SPG^2)                     1 3.1280e+12 9.5552e+15 13627
## + PPG:RPG                      1 1.0280e+12 9.5573e+15 13628
## + PPG:APG                      1 1.0072e+12 9.5573e+15 13628
## + TrustedYes:AgressivenessYes  1 9.6238e+11 9.5574e+15 13628
## + MPG:TOPG                     1 6.7199e+11 9.5576e+15 13628
## + APG:RPG                      1 6.1019e+11 9.5577e+15 13628
## + MPG:RPG                      1 5.6357e+11 9.5578e+15 13628
## + TOPG:AgressivenessYes        1 1.5113e+11 9.5582e+15 13628
## + RPG:TOPG                     1 1.0857e+11 9.5582e+15 13628
## + I(MPG^2)                     1 7.4969e+10 9.5582e+15 13628
## + I(PPG^2)                     1 2.0627e+10 9.5583e+15 13628
## + PPG:TrustedYes               1 3.6299e+09 9.5583e+15 13628
## + MPG:PPG                      1 8.7576e+07 9.5583e+15 13628
## - BPG:AgressivenessYes         1 8.8791e+13 9.6471e+15 13628
## - TOPG:BPG                     1 9.1166e+13 9.6495e+15 13628
## - APG:SPG                      1 1.0279e+14 9.6611e+15 13628
## - APG:AgressivenessYes         1 1.2308e+14 9.6814e+15 13629
## - I(APG^2)                     1 1.2731e+14 9.6856e+15 13629
## - PPG:BPG                      1 1.5769e+14 9.7160e+15 13631
## - PPG:AgressivenessYes         1 1.8260e+14 9.7409e+15 13632
## - MPG:APG                      1 2.0028e+14 9.7586e+15 13633
## - PPG:SPG                      1 2.0990e+14 9.7682e+15 13633
## - PPG:TOPG                     1 2.9213e+14 9.8504e+15 13637
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13624.95
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(APG^2) + MPG:APG + MPG:BPG + MPG:SPG + 
##     MPG:TrustedYes + MPG:AgressivenessYes + PPG:TOPG + PPG:BPG + 
##     PPG:SPG + PPG:AgressivenessYes + APG:SPG + APG:AgressivenessYes + 
##     RPG:SPG + TOPG:BPG + BPG:TrustedYes + BPG:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - RPG:SPG                      1 1.8257e+13 9.6067e+15 13624
## - MPG:BPG                      1 2.1829e+13 9.6103e+15 13624
## <none>                                      9.5884e+15 13625
## + BPG:SPG                      1 3.0129e+13 9.5583e+15 13626
## - TOPG:BPG                     1 6.6228e+13 9.6547e+15 13626
## - MPG:TrustedYes               1 6.7101e+13 9.6555e+15 13626
## - MPG:AgressivenessYes         1 6.7695e+13 9.6561e+15 13626
## + I(RPG^2)                     1 1.7106e+13 9.5713e+15 13626
## - BPG:TrustedYes               1 7.0657e+13 9.6591e+15 13626
## + RPG:BPG                      1 1.5265e+13 9.5732e+15 13626
## + SPG:TrustedYes               1 1.0670e+13 9.5778e+15 13626
## + APG:TrustedYes               1 9.2209e+12 9.5792e+15 13626
## + APG:TOPG                     1 9.2196e+12 9.5792e+15 13626
## - BPG:AgressivenessYes         1 7.8460e+13 9.6669e+15 13626
## - MPG:SPG                      1 8.1554e+13 9.6700e+15 13627
## + PPG:RPG                      1 4.9724e+12 9.5835e+15 13627
## + RPG:TrustedYes               1 4.9460e+12 9.5835e+15 13627
## + SPG:AgressivenessYes         1 4.5314e+12 9.5839e+15 13627
## + RPG:AgressivenessYes         1 4.1073e+12 9.5843e+15 13627
## + TOPG:TrustedYes              1 3.6638e+12 9.5848e+15 13627
## + I(TOPG^2)                    1 3.5690e+12 9.5849e+15 13627
## + TOPG:SPG                     1 3.5298e+12 9.5849e+15 13627
## + I(SPG^2)                     1 2.2058e+12 9.5862e+15 13627
## + MPG:RPG                      1 1.9908e+12 9.5865e+15 13627
## + RPG:TOPG                     1 1.5761e+12 9.5869e+15 13627
## + PPG:APG                      1 1.3125e+12 9.5871e+15 13627
## + I(BPG^2)                     1 1.1909e+12 9.5873e+15 13627
## + TrustedYes:AgressivenessYes  1 7.7205e+11 9.5877e+15 13627
## + MPG:TOPG                     1 6.4047e+11 9.5878e+15 13627
## + APG:RPG                      1 5.3888e+11 9.5879e+15 13627
## + APG:BPG                      1 1.8631e+11 9.5883e+15 13627
## + I(MPG^2)                     1 1.6169e+11 9.5883e+15 13627
## + TOPG:AgressivenessYes        1 6.6052e+10 9.5884e+15 13627
## + I(PPG^2)                     1 2.5138e+10 9.5884e+15 13627
## + MPG:PPG                      1 2.2387e+10 9.5884e+15 13627
## + PPG:TrustedYes               1 1.3072e+09 9.5884e+15 13627
## - APG:SPG                      1 8.8058e+13 9.6765e+15 13627
## - APG:AgressivenessYes         1 1.2271e+14 9.7112e+15 13629
## - I(APG^2)                     1 1.2901e+14 9.7174e+15 13629
## - PPG:BPG                      1 1.3774e+14 9.7262e+15 13629
## - PPG:AgressivenessYes         1 1.7464e+14 9.7631e+15 13631
## - MPG:APG                      1 1.7651e+14 9.7649e+15 13631
## - PPG:SPG                      1 1.9761e+14 9.7861e+15 13632
## - PPG:TOPG                     1 2.6335e+14 9.8518e+15 13635
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13623.79
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(APG^2) + MPG:APG + MPG:BPG + MPG:SPG + 
##     MPG:TrustedYes + MPG:AgressivenessYes + PPG:TOPG + PPG:BPG + 
##     PPG:SPG + PPG:AgressivenessYes + APG:SPG + APG:AgressivenessYes + 
##     TOPG:BPG + BPG:TrustedYes + BPG:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## - MPG:BPG                      1 3.0269e+13 9.6370e+15 13623
## <none>                                      9.6067e+15 13624
## - MPG:TrustedYes               1 5.8085e+13 9.6648e+15 13624
## + I(RPG^2)                     1 2.5182e+13 9.5815e+15 13625
## - BPG:TrustedYes               1 6.2902e+13 9.6696e+15 13625
## - MPG:SPG                      1 6.3352e+13 9.6701e+15 13625
## - MPG:AgressivenessYes         1 6.3611e+13 9.6703e+15 13625
## + RPG:SPG                      1 1.8257e+13 9.5884e+15 13625
## + PPG:RPG                      1 1.4100e+13 9.5926e+15 13625
## + RPG:BPG                      1 1.3506e+13 9.5932e+15 13625
## + SPG:TrustedYes               1 1.2489e+13 9.5942e+15 13625
## - BPG:AgressivenessYes         1 7.5236e+13 9.6819e+15 13625
## - TOPG:BPG                     1 7.6211e+13 9.6829e+15 13625
## + APG:TOPG                     1 1.0818e+13 9.5959e+15 13625
## + RPG:TOPG                     1 1.0693e+13 9.5960e+15 13625
## + APG:TrustedYes               1 9.4749e+12 9.5972e+15 13625
## + MPG:RPG                      1 8.6781e+12 9.5980e+15 13625
## + TOPG:SPG                     1 7.0638e+12 9.5996e+15 13626
## + BPG:SPG                      1 6.1590e+12 9.6005e+15 13626
## + TOPG:TrustedYes              1 4.1811e+12 9.6025e+15 13626
## + I(SPG^2)                     1 4.1345e+12 9.6026e+15 13626
## + I(TOPG^2)                    1 3.8757e+12 9.6028e+15 13626
## + I(BPG^2)                     1 3.0415e+12 9.6037e+15 13626
## + APG:BPG                      1 2.4489e+12 9.6043e+15 13626
## + APG:RPG                      1 2.0024e+12 9.6047e+15 13626
## + SPG:AgressivenessYes         1 1.6004e+12 9.6051e+15 13626
## + MPG:TOPG                     1 1.2868e+12 9.6054e+15 13626
## + PPG:APG                      1 1.0059e+12 9.6057e+15 13626
## + TrustedYes:AgressivenessYes  1 6.0185e+11 9.6061e+15 13626
## + RPG:TrustedYes               1 2.3715e+11 9.6065e+15 13626
## + RPG:AgressivenessYes         1 1.3855e+11 9.6066e+15 13626
## + TOPG:AgressivenessYes        1 8.6826e+10 9.6066e+15 13626
## + I(MPG^2)                     1 2.0696e+10 9.6067e+15 13626
## + PPG:TrustedYes               1 1.1809e+10 9.6067e+15 13626
## + I(PPG^2)                     1 9.8169e+09 9.6067e+15 13626
## + MPG:PPG                      1 5.5853e+08 9.6067e+15 13626
## - APG:SPG                      1 1.1595e+14 9.7227e+15 13627
## - APG:AgressivenessYes         1 1.1902e+14 9.7257e+15 13627
## - PPG:BPG                      1 1.4072e+14 9.7474e+15 13628
## - I(APG^2)                     1 1.4223e+14 9.7489e+15 13628
## - MPG:APG                      1 1.6421e+14 9.7709e+15 13629
## - PPG:AgressivenessYes         1 1.6734e+14 9.7740e+15 13629
## - PPG:SPG                      1 2.0086e+14 9.8076e+15 13631
## - PPG:TOPG                     1 2.4642e+14 9.8531e+15 13633
## - RPG                          1 4.7769e+14 1.0084e+16 13643
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
## 
## Step:  AIC=13623.18
## Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + SPG + TrustedYes + 
##     AgressivenessYes + I(APG^2) + MPG:APG + MPG:SPG + MPG:TrustedYes + 
##     MPG:AgressivenessYes + PPG:TOPG + PPG:BPG + PPG:SPG + PPG:AgressivenessYes + 
##     APG:SPG + APG:AgressivenessYes + TOPG:BPG + BPG:TrustedYes + 
##     BPG:AgressivenessYes
## 
##                               Df  Sum of Sq        RSS   AIC
## <none>                                      9.6370e+15 13623
## + I(RPG^2)                     1 4.0755e+13 9.5962e+15 13623
## + RPG:BPG                      1 3.2462e+13 9.6045e+15 13624
## - TOPG:BPG                     1 5.5278e+13 9.6922e+15 13624
## - MPG:AgressivenessYes         1 5.6598e+13 9.6936e+15 13624
## + MPG:BPG                      1 3.0269e+13 9.6067e+15 13624
## - MPG:SPG                      1 5.8008e+13 9.6950e+15 13624
## - BPG:AgressivenessYes         1 5.9268e+13 9.6962e+15 13624
## + RPG:SPG                      1 2.6697e+13 9.6103e+15 13624
## + MPG:RPG                      1 2.6005e+13 9.6110e+15 13624
## + PPG:RPG                      1 1.8795e+13 9.6182e+15 13624
## + RPG:TOPG                     1 1.5239e+13 9.6217e+15 13624
## + APG:TOPG                     1 1.4769e+13 9.6222e+15 13624
## - MPG:TrustedYes               1 7.3838e+13 9.7108e+15 13625
## + APG:TrustedYes               1 9.2494e+12 9.6277e+15 13625
## + TOPG:SPG                     1 9.0400e+12 9.6279e+15 13625
## + TOPG:TrustedYes              1 7.5608e+12 9.6294e+15 13625
## + APG:BPG                      1 6.4859e+12 9.6305e+15 13625
## + SPG:TrustedYes               1 4.9391e+12 9.6320e+15 13625
## + I(SPG^2)                     1 4.8687e+12 9.6321e+15 13625
## + PPG:APG                      1 3.3978e+12 9.6336e+15 13625
## + SPG:AgressivenessYes         1 3.0211e+12 9.6339e+15 13625
## + APG:RPG                      1 2.6198e+12 9.6343e+15 13625
## + I(MPG^2)                     1 1.8825e+12 9.6351e+15 13625
## + I(TOPG^2)                    1 1.3308e+12 9.6356e+15 13625
## + MPG:PPG                      1 3.8245e+11 9.6366e+15 13625
## + RPG:TrustedYes               1 3.5643e+11 9.6366e+15 13625
## + MPG:TOPG                     1 1.8714e+11 9.6368e+15 13625
## + I(PPG^2)                     1 6.7831e+10 9.6369e+15 13625
## + BPG:SPG                      1 6.4782e+10 9.6369e+15 13625
## + RPG:AgressivenessYes         1 5.7643e+10 9.6369e+15 13625
## + PPG:TrustedYes               1 5.3417e+10 9.6369e+15 13625
## + TOPG:AgressivenessYes        1 3.4254e+10 9.6369e+15 13625
## + TrustedYes:AgressivenessYes  1 1.9170e+09 9.6370e+15 13625
## + I(BPG^2)                     1 1.3607e+09 9.6370e+15 13625
## - PPG:BPG                      1 1.1230e+14 9.7493e+15 13626
## - APG:AgressivenessYes         1 1.1261e+14 9.7496e+15 13626
## - APG:SPG                      1 1.1865e+14 9.7556e+15 13627
## - I(APG^2)                     1 1.4611e+14 9.7831e+15 13628
## - MPG:APG                      1 1.5359e+14 9.7906e+15 13628
## - PPG:AgressivenessYes         1 1.5778e+14 9.7948e+15 13628
## - BPG:TrustedYes               1 1.9502e+14 9.8320e+15 13630
## - PPG:SPG                      1 1.9892e+14 9.8359e+15 13630
## - PPG:TOPG                     1 2.3613e+14 9.8731e+15 13632
## - RPG                          1 4.8769e+14 1.0125e+16 13643
summary(model_stepwise)
## 
## Call:
## lm(formula = Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + 
##     SPG + TrustedYes + AgressivenessYes + I(APG^2) + MPG:APG + 
##     MPG:SPG + MPG:TrustedYes + MPG:AgressivenessYes + PPG:TOPG + 
##     PPG:BPG + PPG:SPG + PPG:AgressivenessYes + APG:SPG + APG:AgressivenessYes + 
##     TOPG:BPG + BPG:TrustedYes + BPG:AgressivenessYes, data = per_game_stats, 
##     trControl = train_control)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -14937985  -2273358   -461127   2318966  18582921 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            -543468    1186172  -0.458  0.64707    
## MPG                     180653     133652   1.352  0.17721    
## PPG                     -59682     251745  -0.237  0.81272    
## APG                   -1969636    1092244  -1.803  0.07206 .  
## RPG                     818296     177918   4.599 5.63e-06 ***
## TOPG                   -391774    1612970  -0.243  0.80821    
## BPG                     -73317    1612103  -0.045  0.96375    
## SPG                    2663406    3261544   0.817  0.41462    
## TrustedYes           -11599960    4748465  -2.443  0.01498 *  
## AgressivenessYes       5902362    3551177   1.662  0.09725 .  
## I(APG^2)                283784     112728   2.517  0.01219 *  
## MPG:APG                 137917      53434   2.581  0.01019 *  
## MPG:SPG                -281745     177621  -1.586  0.11345    
## MPG:TrustedYes          392843     219513   1.790  0.07424 .  
## MPG:AgressivenessYes   -296519     189250  -1.567  0.11791    
## PPG:TOPG               -274828      85875  -3.200  0.00148 ** 
## PPG:BPG                -363323     164619  -2.207  0.02785 *  
## PPG:SPG                 672283     228872   2.937  0.00349 ** 
## PPG:AgressivenessYes    733673     280450   2.616  0.00922 ** 
## APG:SPG               -1325717     584378  -2.269  0.02380 *  
## APG:AgressivenessYes  -1885903     853314  -2.210  0.02764 *  
## TOPG:BPG               1979001    1278068   1.548  0.12228    
## BPG:TrustedYes         6520298    2241878   2.908  0.00383 ** 
## BPG:AgressivenessYes  -3907032    2436786  -1.603  0.10961    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4802000 on 418 degrees of freedom
## Multiple R-squared:  0.6192, Adjusted R-squared:  0.5983 
## F-statistic: 29.56 on 23 and 418 DF,  p-value: < 2.2e-16

Best model

stepwise_model <- lm(formula = Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + 
    SPG + TrustedYes + AgressivenessYes + I(APG^2) + MPG:APG + 
    MPG:SPG + MPG:TrustedYes + MPG:AgressivenessYes + PPG:TOPG + 
    PPG:BPG + PPG:SPG + PPG:AgressivenessYes + APG:SPG + APG:AgressivenessYes + 
    TOPG:BPG + BPG:TrustedYes + BPG:AgressivenessYes, data = per_game_stats, 
    trControl = train_control)
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'trControl' will be disregarded
summary(stepwise_model)
## 
## Call:
## lm(formula = Salary17_18 ~ MPG + PPG + APG + RPG + TOPG + BPG + 
##     SPG + TrustedYes + AgressivenessYes + I(APG^2) + MPG:APG + 
##     MPG:SPG + MPG:TrustedYes + MPG:AgressivenessYes + PPG:TOPG + 
##     PPG:BPG + PPG:SPG + PPG:AgressivenessYes + APG:SPG + APG:AgressivenessYes + 
##     TOPG:BPG + BPG:TrustedYes + BPG:AgressivenessYes, data = per_game_stats, 
##     trControl = train_control)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -14937985  -2273358   -461127   2318966  18582921 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            -543468    1186172  -0.458  0.64707    
## MPG                     180653     133652   1.352  0.17721    
## PPG                     -59682     251745  -0.237  0.81272    
## APG                   -1969636    1092244  -1.803  0.07206 .  
## RPG                     818296     177918   4.599 5.63e-06 ***
## TOPG                   -391774    1612970  -0.243  0.80821    
## BPG                     -73317    1612103  -0.045  0.96375    
## SPG                    2663406    3261544   0.817  0.41462    
## TrustedYes           -11599960    4748465  -2.443  0.01498 *  
## AgressivenessYes       5902362    3551177   1.662  0.09725 .  
## I(APG^2)                283784     112728   2.517  0.01219 *  
## MPG:APG                 137917      53434   2.581  0.01019 *  
## MPG:SPG                -281745     177621  -1.586  0.11345    
## MPG:TrustedYes          392843     219513   1.790  0.07424 .  
## MPG:AgressivenessYes   -296519     189250  -1.567  0.11791    
## PPG:TOPG               -274828      85875  -3.200  0.00148 ** 
## PPG:BPG                -363323     164619  -2.207  0.02785 *  
## PPG:SPG                 672283     228872   2.937  0.00349 ** 
## PPG:AgressivenessYes    733673     280450   2.616  0.00922 ** 
## APG:SPG               -1325717     584378  -2.269  0.02380 *  
## APG:AgressivenessYes  -1885903     853314  -2.210  0.02764 *  
## TOPG:BPG               1979001    1278068   1.548  0.12228    
## BPG:TrustedYes         6520298    2241878   2.908  0.00383 ** 
## BPG:AgressivenessYes  -3907032    2436786  -1.603  0.10961    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4802000 on 418 degrees of freedom
## Multiple R-squared:  0.6192, Adjusted R-squared:  0.5983 
## F-statistic: 29.56 on 23 and 418 DF,  p-value: < 2.2e-16

Model Performance: The model’s r-squared value is 0.6192, and the adjusted r-squared is 0.5983. This means that the predictors in the model explain about 61.92% of the variation in player salaries, showing that it captures a substantial portion of the influencing factors.

Key Predictors: Certain variables, like rebounds per game (RPG), show a strong positive relationship with salary. This indicates that players who excel at rebounding tend to earn more.

Interaction Effects: The model includes interaction terms such as PPG (points per game and steals per game) and PPG (points per game and aggressive play style). These significant interactions demonstrate that specific skill combinations can increase player salaries.

Second-Order Terms: The model includes second-order terms like I(APG2)I(APG^2)I(APG2) (assists per game squared). These terms help capture non-linear relationships, where the effect of assists on salary changes at higher levels.

Model Robustness: The strong F-statistic (p-value < 2.2e-16) confirms that the model, as a whole, is statistically significant and the predictors contribute meaningful information for salary prediction.

RandomForest

library(dplyr)
rf_data <- per_game_stats %>% select( MPG, PPG, APG, RPG, TOPG, BPG, SPG, TrustedYes, AgressivenessYes, Salary17_18)
head(rf_data)
##         MPG       PPG       APG      RPG      TOPG       BPG        SPG
## 1  7.409091  2.181818 0.1818182 1.636364 0.4545455 0.5909091 0.04545455
## 2 13.753846  4.953846 1.9230769 1.061538 1.0153846 0.1384615 0.38461538
## 3 28.725000 12.737500 1.8750000 5.062500 1.1125000 0.5000000 0.80000000
## 4 29.065574  8.721311 1.6229508 7.393443 1.5409836 0.7213115 0.98360656
## 5 32.250000 14.000000 4.9558824 6.823529 1.7058824 1.2794118 0.76470588
## 6 14.106061  8.106061 0.8636364 4.212121 0.5000000 0.2424242 0.28787879
##   TrustedYes AgressivenessYes Salary17_18
## 1          0                0     1312611
## 2          0                0     2116955
## 3          1                0     5504420
## 4          1                1     7319035
## 5          1                1    27734405
## 6          0                0     9769821
library(randomForest)
## randomForest 4.7-1.2
## Type rfNews() to see new features/changes/bug fixes.
## 
## Attaching package: 'randomForest'
## The following object is masked from 'package:ggplot2':
## 
##     margin
## The following object is masked from 'package:dplyr':
## 
##     combine
rf_model <- randomForest(Salary17_18 ~ ., data = rf_data, ntree = 500)

print(rf_model)
## 
## Call:
##  randomForest(formula = Salary17_18 ~ ., data = rf_data, ntree = 500) 
##                Type of random forest: regression
##                      Number of trees: 500
## No. of variables tried at each split: 3
## 
##           Mean of squared residuals: 2.66485e+13
##                     % Var explained: 53.46
predictions <- predict(rf_model, rf_data)

rmse <- sqrt(mean((predictions - rf_data$Salary17_18)^2))
cat("RMSE: ", rmse, "\n")
## RMSE:  2350629
rsq <- 1 - sum((predictions - rf_data$Salary17_18)^2) / sum((rf_data$Salary17_18 - mean(rf_data$Salary17_18))^2)
cat("R-squared: ", rsq, "\n")
## R-squared:  0.9035066

Mean of Squared Residuals: The mean squared residual (error) is 2.637338e+13 which gives an idea of how well the model is fitting the data (lower values are better).

The model explains 53.94% of the variance in the target variable (Salary17_18). This indicates that the model captures just over half of the variability in the target variable, which is useful but not perfect.

RMSE (Root Mean Squared Error): The RMSE is 2,334,881, which measures the average magnitude of the error between the predicted and actual values. This indicates how far off, on average, the predictions are from the actual values.

R-squared: The R² value of 0.9048 is very high, indicating that about 90.48% of the variance in salary can be explained by the model’s features.

Accuracy comparison

let’s create a predicted columns for both the models

predict_salary_rf <- function(point, minutes, turn_over, rebounds, assists, block, steal, TrustedYes, AgressivenessYes) {
  predict(rf_model, data.frame(PPG = point, MPG = minutes, TOPG = turn_over, RPG = rebounds, SPG = steal, 
                               APG = assists, BPG = block, TrustedYes = TrustedYes, AgressivenessYes = AgressivenessYes))
}

per_game_stats$rf_Predicted_Salary <- mapply(predict_salary_rf, 
                                                   point = per_game_stats$PPG,
                                                   minutes = per_game_stats$MPG,
                                                   turn_over = per_game_stats$TOPG,
                                                   rebounds = per_game_stats$RPG,
                                                   assists = per_game_stats$APG,
                                                   block = per_game_stats$BPG,
                                                   steal = per_game_stats$SPG,
                                                   TrustedYes = per_game_stats$TrustedYes,
                                                   AgressivenessYes = per_game_stats$AgressivenessYes)


predict_salary_stepwise <- function(point, minutes, turn_over, rebounds, assists, block, steal, TrustedYes, AgressivenessYes) {
  predict(stepwise_model, data.frame(PPG = point, MPG = minutes, TOPG = turn_over, RPG = rebounds, SPG = steal, 
                               APG = assists, BPG = block, TrustedYes = TrustedYes, AgressivenessYes = AgressivenessYes))
}

per_game_stats$stepwise_Predicted_Salary <- mapply(predict_salary_stepwise, 
                                                   point = per_game_stats$PPG,
                                                   minutes = per_game_stats$MPG,
                                                   turn_over = per_game_stats$TOPG,
                                                   rebounds = per_game_stats$RPG,
                                                   assists = per_game_stats$APG,
                                                   block = per_game_stats$BPG,
                                                   steal = per_game_stats$SPG,
                                                   TrustedYes = per_game_stats$TrustedYes,
                                                   AgressivenessYes = per_game_stats$AgressivenessYes)

head(per_game_stats)
##            Player Team       MPG       PPG       APG      RPG      TOPG
## 1    A.J. Hammons  DAL  7.409091  2.181818 0.1818182 1.636364 0.4545455
## 2    Aaron Brooks  IND 13.753846  4.953846 1.9230769 1.061538 1.0153846
## 3    Aaron Gordon  ORL 28.725000 12.737500 1.8750000 5.062500 1.1125000
## 4 Al-Farouq Aminu  POR 29.065574  8.721311 1.6229508 7.393443 1.5409836
## 5      Al Horford  BOS 32.250000 14.000000 4.9558824 6.823529 1.7058824
## 6    Al Jefferson  IND 14.106061  8.106061 0.8636364 4.212121 0.5000000
##         BPG        SPG TrustedYes AgressivenessYes Salary17_18 Cluster
## 1 0.5909091 0.04545455          0                0     1312611       2
## 2 0.1384615 0.38461538          0                0     2116955       2
## 3 0.5000000 0.80000000          1                0     5504420       2
## 4 0.7213115 0.98360656          1                1     7319035       2
## 5 1.2794118 0.76470588          1                1    27734405       3
## 6 0.2424242 0.28787879          0                0     9769821       1
##   rf_Predicted_Salary stepwise_Predicted_Salary
## 1             1482978                   1491947
## 2             1865646                   1496801
## 3             6844990                  10643725
## 4             9303577                  10398142
## 5            20956951                  18707029
## 6             6776402                   4218798
library(ggplot2)
library(gridExtra)
## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:randomForest':
## 
##     combine
## The following object is masked from 'package:dplyr':
## 
##     combine
plot_rf <- ggplot(per_game_stats) + 
  geom_point(aes(x = Salary17_18, y = rf_Predicted_Salary), color = "blue", alpha = 0.6) + 
  geom_abline(slope = 1, intercept = 0, color = "red", linetype = "dashed") + 
  labs(title = "Random Forest: Actual vs Predicted Salaries", x = "Actual Salary", y = "Predicted Salary (RF)") +
  theme_minimal() + theme(plot.title = element_text(hjust = 0.5))

plot_stepwise <- ggplot(per_game_stats) + 
  geom_point(aes(x = Salary17_18, y = stepwise_Predicted_Salary), color = "green", alpha = 0.6) + 
  geom_abline(slope = 1, intercept = 0, color = "red", linetype = "dashed") + 
  labs(title = "Stepwise: Actual vs Predicted Salaries", x = "Actual Salary", y = "Predicted Salary (Stepwise)") +
  theme_minimal() + theme(plot.title = element_text(hjust = 0.5))

grid.arrange(plot_rf, plot_stepwise, ncol = 2)

Random Forest:

The predicted values closely align with the actual values, especially for low-to-mid-range salaries, suggesting high accuracy. Slight deviations occur at the higher salary range.

Stepwise Regression:

The predictions are more dispersed around the red line, indicating lower accuracy and higher variance. It struggles with higher salaries, showing significant underprediction.

Overall, the Random Forest model outperforms Stepwise Regression in terms of predictive accuracy and consistency.

g. Evaluation

summary(rf_data$Salary17_18)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
##    17224  1518316  3519283  7106258 10812701 34682550

Let’s set the median as the threshold for our classification of salaries.

threshold <- 3519283
rf_data$Salary_Class <- ifelse(rf_data$Salary17_18 > threshold, "High Salary", "Low Salary")
rf_data$Salary_Class <- factor(rf_data$Salary_Class)

predictions <- predict(rf_model, rf_data)
predicted_class <- ifelse(predictions > threshold, "High Salary", "Low Salary")
predicted_class <- factor(predicted_class, levels = c("Low Salary", "High Salary"))

A salary class column is created based on weather the salary is above or below the threshold.

The rf_model is used to make the predictions.

Predictions are also classified as high or low based on the same threshold.

conf_matrix <- table(Predicted = predicted_class, Actual = rf_data$Salary_Class)
print(conf_matrix)
##              Actual
## Predicted     High Salary Low Salary
##   Low Salary            2        171
##   High Salary         219         50

The confusion matrix indicates that the model has a relatively high number of false positives (219) for “High Salary” and true negatives (167) for “Low Salary.” The recall is quite high (0.99), meaning it successfully identifies most players with “High Salary,” but the precision (0.80) suggests that it misclassifies some players as “High Salary” when they actually belong in the “Low Salary” category.

TP <- conf_matrix["High Salary", "High Salary"]
TN <- conf_matrix["Low Salary", "Low Salary"]
FP <- conf_matrix["High Salary", "Low Salary"]
FN <- conf_matrix["Low Salary", "High Salary"]

precision <- TP / (TP + FP)
recall <- TP / (TP + FN)

cat("Precision: ", precision, "\n")
## Precision:  0.8141264
cat("Recall: ", recall, "\n")
## Recall:  0.9909502

Precision (0.80): This means that 80% of the players predicted as “High Salary” actually have a high salary. It’s a measure of the model’s accuracy in identifying “High Salary” players without making too many mistakes (false positives).

Recall (0.99): This indicates that the model correctly identified 99% of the actual “High Salary” players. It’s a measure of the model’s ability to capture most of the true “High Salary” players, even if it makes some false positives.

The model has a very high recall, meaning it successfully identifies most high-salary players. However, with a precision of 80%, it occasionally misclassifies lower salary players as high salary. While the model excels at recognizing high salary players, improving its precision by reducing false positives would lead to better performance overall.

library(pROC)
## Type 'citation("pROC")' for a citation.
## 
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
## 
##     cov, smooth, var
probabilities <- predict(rf_model, rf_data, type = "response")
roc_curve <- roc(rf_data$Salary_Class, probabilities)
## Setting levels: control = High Salary, case = Low Salary
## Setting direction: controls > cases
plot(roc_curve, main = "ROC Curve")

Curve Shape: The curve is close to the top-left corner, indicating strong model performance. Diagonal Reference Line: The diagonal represents random guessing. Your curve being above this line shows the model performs better than random.

Area Under Curve (AUC): Though not explicitly mentioned, the shape suggests a high AUC, reflecting good discrimination between high and low salary classes.

The model has excellent sensitivity and precision (as seen in prior metrics), and the ROC curve confirms its ability to distinguish between salary classes effectively. However, the imbalance in misclassification rates (notably, high false positives for “High Salary”) should be considered for refinement.

Report

1.Introduction

This project involves building a predictive model to estimate NBA player salaries for the 2017- 2018 season. The prediction is based on player performance data from the 2016-2017 season, allowing us to assess how past performance influences future earnings.

Objective:

To develop a model that can predict the 2017-2018 season salaries of NBA players using their statistics from the previous season. Understanding the relationship between player performance and salary can provide insights into the factors that NBA teams consider when compensating players. It highlights which performance metrics are most valued and how they contribute to a player’s market worth, guiding both management decisions and player career strategies.

2.Data Gathering and Integration

Two primary datasets were used:

a.Stats dataset: Contains detailed performance metrics for NBA players from 1950 to 2017.

b.Salary_1718 dataset: Includes salaries of NBA players for the 2017-2018 season. The datasets were filtered to focus on the 2016-2017 season stats and merged based on player names.

3.Data Cleaning and Preprocessing

1.Removal of unnecessary columns (e.g., Team).

2.Handling of 32 NA values by replacing them with column means.

3.Creation of per-game statistics (e.g., PPG, MPG, APG) to normalize player performance.

4.Introduction of derived variables: “Aggressiveness”: Based on above-average turnovers per game. “Trusted”: Based on above-average minutes per game.

4.Data Exploration

Correlation analysis revealed:

Strongest correlations with salary: PPG > MPG > TOPG > RPG > PER > SPG > APG

Positive correlation between turnovers and salary, interpreted as a sign of player involvement Visualization of PPG vs. salary showed a general upward trend, indicating higher salaries for players with higher scoring averages.

5.Clustering Analysis

The optimal number of clusters was determined using two methods:

Elbow Method: Suggested 3 clusters as optimal.

Silhouette Method: Confirmed 3 clusters as optimal.

Clustering observations revealed:

6.Classification Models

Two classification models were developed:

Stepwise Regression Model:

R-squared: 0.6192

Adjusted R-squared: 0.5983

Key predictors: RPG, PPG interactions, APG squared

Random Forest Model:

Mean Squared Residuals: 2.637338e+13

Variance explained: 53.94%

R-squared: 0.9048

The Random Forest model outperformed the Stepwise Regression model in terms of predictive accuracy and consistency.

7.Model Evaluation

A threshold of $351,983 (median salary) was set to classify salaries as high or low. The Random Forest model was evaluated using various metrics:

Precision: 0.80

Recall: 0.99

ROC curve: Showed strong model performance with a curve close to the top-left corner The model excelled at identifying high-salary players but occasionally misclassified lower salary players as high salary.

.8.Conclusion

This project demonstrated the effectiveness of machine learning techniques in predicting NBA player salaries based on performance metrics. The Random Forest model showed superior performance, explaining about 90% of the variance in salaries. The analysis highlighted the importance of scoring, rebounding, and playing time in determining a player’s market value. Future refinements could focus on reducing false positives in high salary predictions to improve overall model accuracy.

i. Reflection

This Project emphasized the importance of data preparation, from cleaning to visualization, and taught the nuances of unsupervised and supervised techniques. Through hands-on work, I strengthened my R programming skills and gained deeper insights into clustering and classification. The journey underscored the value of metrices like precision and Roc in complementing accuracy for model evaluation.

Fundamental of Data Science as a course has provided a solid foundation for data science principles and practices. The hands-on experience with working with real world data as assignments and projects has been invaluable, bridging the gap between theory and applications. As I move forward in my data science journey, I am confident that these skills and experiences will serve as a strong basis of tackling more complex challenges and contributing meaningfully to my future projects.